开发者

How can i bind parent's property to its child's property?

开发者 https://www.devze.com 2023-01-02 02:24 出处:网络
I have a GroupBox, which is defined like this <ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"

I have a GroupBox, which is defined like this

<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 Hea开发者_StackOverflow中文版derTemplate}" Content="{TemplateBinding Header}"/>
                        </ContentControl>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

And i'm using this control like this

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

So, well, my questions - how can i bind property IsEnabled of GroupBox to the Checkbox property IsChecked? Thanks in advance.


Didn't try it but you should be able to do something like this:

<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>


In fact there was no need to define DataTemplate. This code works the same way.

<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

精彩评论

暂无评论...
验证码 换一张
取 消