2011-05-20 8 views
5

Si creo un control CheckBox en WPF (sin contenido - Solo necesito la parte de marcar/desmarcar), pone la "caja" visual (el rectángulo tridimensional que tiene o no marca de verificación) en él) en la esquina superior izquierda del control.¿Cómo puedo centrar una casilla de verificación WPF dentro de su región cliqueable?

¿Puedo poner la "caja" visual en el centro del control CheckBox en su lugar? Es decir, ¿centrado tanto horizontal como verticalmente? Algo como esto:

enter image description here

que puedo conseguir algo visualmente similar a esto estableciendo HorizontalAlignment y VerticalAlignment de la casilla de verificación al centro. Esto hace que el control CheckBox se reduzca a solo el tamaño de su visual de "cuadro" y luego se centra dentro de su elemento primario. Sin embargo, solo responde a los clics en el visual de "caja", que presenta un objetivo mucho más pequeño e inconveniente.

+0

Una opción sería para estirar la casilla de verificación en toda la disposición se [usando 'ViewBox'] (http://stackoverflow.com/questions/981067/wpf-silverlight-xaml-stretch-text-size-to-fit-container/981182#981182). Es cierto que eso se vería muy extraño. – svick

Respuesta

0

Puede cambiar la plantilla de la casilla de verificación. La forma más fácil es copiar la plantilla por defecto usando algo como StyleSnooper y luego editarlo para sus necesidades a algo como esto:

<ControlTemplate> 
    <BulletDecorator Background="Transparent"> 
    <aero:BulletChrome Width="13" Height="13" Background="{TemplateBinding Panel.Background}" 
         BorderBrush="{TemplateBinding Border.BorderBrush}" RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}" 
         RenderPressed="{TemplateBinding ButtonBase.IsPressed}" IsChecked="{TemplateBinding ToggleButton.IsChecked}" /> 
    </BulletDecorator> 
    <ControlTemplate.Triggers> 
    <Trigger Property="ContentControl.HasContent" Value="True"> 
     <Setter Property="FrameworkElement.FocusVisualStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type IFrameworkInputElement}"> 
      <Setter Property="Control.Template"> 
       <Setter.Value> 
       <ControlTemplate> 
        <Rectangle Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" 
          StrokeThickness="1" StrokeDashArray="1 2" Margin="14,0,0,0" SnapsToDevicePixels="True" /> 
       </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      </Style> 
     </Setter.Value> 
     </Setter> 
     <Setter Property="Control.Padding" Value="4,0,0,0" /> 
    </Trigger> 
    <Trigger Property="UIElement.IsEnabled" Value="False"> 
     <Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

Esa muestra no funcionó del todo en .NET 4 pero tomé el mismo enfoque de ejecutar StyleSnooper y lo puse en marcha. Debe incluir PresentationFramework.Aero en las referencias de su proyecto, agregar un par de espacios de nombres necesarios, eliminar ContentPresenter y mover el elemento BulletChrome directamente debajo de BulletDecorator. El principal problema es que, incluso si el usuario usa un tema diferente, siempre obtendrá la casilla de verificación Aero temática. – RandomEngy

Cuestiones relacionadas