2010-06-04 6 views
0

J'ai un GroupBox, qui est défini comme celui-ciComment puis-je lier la propriété du parent à la propriété de son enfant?

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Groupbox" 
    > 
    <Style TargetType="local:GroupBox"> 
     <Setter Property="BorderBrush" Value="DarkGray"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Padding" Value="6"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="local:GroupBox"> 
        <Grid Background="{TemplateBinding Background}"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <Border BorderThickness="{TemplateBinding BorderThickness}" Grid.Row="1" Grid.RowSpan="2" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="3"> 
          <Border.Clip> 
           <GeometryGroup FillRule="EvenOdd"> 
            <RectangleGeometry x:Name="FullRect" Rect="0,0,300,200"/> 
            <RectangleGeometry x:Name="HeaderRect" Rect="6,0,100,100"/> 
           </GeometryGroup> 
          </Border.Clip> 
         </Border> 
         <ContentPresenter Grid.Row="2" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"/> 
         <ContentControl x:Name="HeaderContainer" Margin="6,0,0,0" Grid.Row="0" Grid.RowSpan="2" HorizontalAlignment="Left"> 
          <ContentPresenter Margin="3,0,3,0" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}"/> 
         </ContentControl> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

Et j'utilise ce contrôle comme celui-ci

<Controls:GroupBox x:Name="GroupBox"> 
    <Controls:GroupBox.HeaderTemplate> 
    <DataTemplate> 
     <CheckBox "Header" x:Name="cbHeader"/> 
    </DataTemplate> 
    </Controls:GroupBox.HeaderTemplate> 
<Controls:GroupBox> 

Alors, eh bien, mes questions - comment lier propriété IsEnabled de GroupBox à la propriété CheckCheck IsChecked? Merci d'avance.

Répondre

0

En fait, il n'a pas été nécessaire de définir DataTemplate. Ce code fonctionne de la même manière.

<Panels:GroupBox> 
    <Panels:GroupBox.Header> 
    <CheckBox Content="Header" x:Name="cbHeader" IsChecked="{Binding IsHeaderChecked}" /> 
    </Panels:GroupBox.Header> 
    <ContentControl HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" IsEnabled="{Binding Path=IsChecked, ElementName=cbHeader}"/> 
</Panels:GroupBox> 
0

n'a pas essayé, mais vous devriez être en mesure de faire quelque chose comme ceci:

<Controls:GroupBox x:Name="MyGroupBox"> 
    <Controls:GroupBox.HeaderTemplate> 
    <DataTemplate> 
     <CheckBox IsChecked="{Binding Path=IsEnabled, ElementName=MyGroupBox, Mode=TwoWay}" Content="Header" x:Name="cbHeader" /> 
    </DataTemplate> 
    </Controls:GroupBox.HeaderTemplate> 
<Controls:GroupBox> 
+0

Avez-vous testé cela, le «TemplatedParent» dans ce cas semble être le ContentPresenter dans le modèle de contrôle. – AnthonyWJones

+0

N'a pas testé, non. Ma modification a fonctionné pour moi avec un ItemsControl au lieu d'un GroupBox mais le concept est le même. – David

+0

Votre exemple lie IsChecked à IsEnabled et je dois le lier vice versa - IsEnabled à IsChecked. – Walkor

Questions connexes