2011-04-06 3 views
2

J'ai rencontré une situation dans l'application que je développais. Je veux écrire un modèle pour une case à cocher où je devrais être en mesure de désactiver uniquement la case de la marque et garder l'étiquette activée. Est-ce vraiment possible. Je suis venu avec un modèle, mais quand je désactive la case à cocher à la fois l'étiquette et la coche sont désactivés.Modèle de case à cocher dans WPF

Répondre

2

ont juste jeter un oeil à ce XAML

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300" > 
<Window.Resources> 
    <Style x:Key="CheckBoxFocusVisual"> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Border> 
         <Rectangle Margin="15,0,0,0" Stroke="#60000000" StrokeThickness="1" StrokeDashArray="1 2"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <!-- PressedBrush is used for Pressed in Button, Radio Button, CheckBox --> 
    <LinearGradientBrush x:Key="PressedBrush" EndPoint="0,1" StartPoint="0,0"> 
     <GradientStop Color="#BBB" Offset="0.0"/> 
     <GradientStop Color="#EEE" Offset="0.1"/> 
     <GradientStop Color="#EEE" Offset="0.9"/> 
     <GradientStop Color="#FFF" Offset="1.0"/> 
    </LinearGradientBrush> 
    <LinearGradientBrush x:Key="PressedBorderBrush" EndPoint="0,1" StartPoint="0,0"> 
     <GradientStop Color="#444" Offset="0.0"/> 
     <GradientStop Color="#888" Offset="1.0"/> 
    </LinearGradientBrush> 
    <LinearGradientBrush x:Key="NormalBrush" EndPoint="0,1" StartPoint="0,0"> 
     <GradientStop Color="#EEE" Offset="0.0"/> 
     <GradientStop Color="#CCC" Offset="1.0"/> 
    </LinearGradientBrush> 
    <SolidColorBrush x:Key="GlyphBrush" Color="#444"/> 
    <LinearGradientBrush x:Key="NormalBorderBrush" EndPoint="0,1" StartPoint="0,0"> 
     <GradientStop Color="#CCC" Offset="0.0"/> 
     <GradientStop Color="#444" Offset="1.0"/> 
    </LinearGradientBrush> 
    <LinearGradientBrush x:Key="MouseOverBrush" EndPoint="0,1" StartPoint="0,0"> 
     <GradientStop Color="#FFF" Offset="0.0"/> 
     <GradientStop Color="#AAA" Offset="1.0"/> 
    </LinearGradientBrush> 
    <!-- Simple CheckBox --> 
    <Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}"> 
     <Setter Property="SnapsToDevicePixels" Value="true"/> 
     <Setter Property="FocusVisualStyle" Value="{DynamicResource CheckBoxFocusVisual}"/> 
     <Setter Property="Background" Value="{DynamicResource NormalBrush}"/> 
     <Setter Property="BorderBrush" Value="{DynamicResource NormalBorderBrush}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type CheckBox}"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"></ColumnDefinition> 
          <ColumnDefinition></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <!-- BulletDecorator is used to provide baseline alignment between the checkmark and the Content --> 
         <BulletDecorator x:Name="test" Grid.Column="0"> 
          <BulletDecorator.Bullet> 
           <Grid Width="13" Height="13"> 
            <Border x:Name="Border" 
           Background="{TemplateBinding Background}" 
           BorderBrush="{TemplateBinding BorderBrush}" 
           BorderThickness="{TemplateBinding BorderThickness}"/> 
            <Path x:Name="CheckMark" Stroke="{DynamicResource GlyphBrush}" 
           StrokeThickness="2" 
           SnapsToDevicePixels="False" Data="M 0 0 L 13 13 M 0 13 L 13 0"/> 
           </Grid> 
          </BulletDecorator.Bullet> 
         </BulletDecorator> 
         <ContentPresenter Grid.Column="1" 
        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
        Margin="{TemplateBinding Padding}" 
        VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
        RecognizesAccessKey="True"/> 

        </Grid> 
        <!-- This uses Visibility to hide and show the CheckMark on IsChecked --> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsChecked" Value="false"> 
          <Setter Property="Visibility" Value="Collapsed" TargetName="CheckMark"/> 
         </Trigger> 
         <Trigger Property="IsMouseOver" Value="true"> 
          <Setter Property="Background" Value="{DynamicResource MouseOverBrush}" TargetName="Border"/> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="true"> 
          <Setter Property="Background" Value="{DynamicResource PressedBrush}" TargetName="Border"/> 
          <Setter Property="BorderBrush" Value="{DynamicResource PressedBorderBrush}" TargetName="Border"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Background" Value="gray" TargetName="Border"/> 
          <Setter Property="BorderBrush" Value="black" TargetName="Border"/> 
         </Trigger> 

        </ControlTemplate.Triggers> 

       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</Window.Resources> 

<Grid x:Name="LayoutRoot"> 
    <CheckBox HorizontalAlignment="Left" 
    Margin="0,5,0,0" Style="{DynamicResource CheckBoxStyle1}" 
    VerticalAlignment="Top" Width="182" Height="17" 
    Content="Disabled" IsEnabled="False" IsChecked="True" /> 
    <CheckBox HorizontalAlignment="Left" 
    Margin="125,5,0,0" Style="{DynamicResource CheckBoxStyle1}" 
    VerticalAlignment="Top" Width="182" Height="17" 
    Content="Active" IsEnabled="true" /> 
</Grid> 

+0

Cela fonctionne exactement comme je le voulais ... Merci beaucoup Kishore ...:) @ Kishore – Anee

0

J'ai eu le même problème et a trouvé une solution assez stupide:

<StackPanel Orientation="Vertical" > 
     <TextBlock Text="Set Global Edition" TextWrapping="Wrap" HorizontalAlignment="Center" /> 
     <CheckBox x:Name="GlobalEdition" IsChecked="{Binding IsGlobal}" HorizontalAlignment="Center" /> 
</StackPanel> 

Depuis le TextBlock & sont séparés Checkbox, changer l'état Checkbox n'influencera pas le texte attaché.

(Si je me souviens bien, une zone de texte ne change pas son apparence si elle est désactivée, vous pouvez peut-être essayer avec une zone de texte au lieu d'une étiquette)

+0

Eh bien, j'ai essayé avec un textbox et pas de chance avec ça aussi. Je suis en train d'écrire un modèle pour cela et le tout est désactivé lorsque la case à cocher désactiver. @ Damascus – Anee

+0

Mettez-vous la zone de texte dans la case à cocher? Parce que cela pourrait être le problème, si elle est insite la case à cocher il sera indéniablement lié à l'état de la boîte (c'est pourquoi j'ai mis deux contrôles séparés dans un StackPanel plutôt que d'ajouter un textBlock dans le checkBox qui, comme vous venez de le voir, ne fonctionne pas de cette façon) – Damascus

+0

Dans le modèle, j'ai mis à la fois la zone de texte et la case à cocher. @Damascus – Anee

Questions connexes