【问题标题】:How can i bind parent's property to its child's property?如何将父母的财产绑定到其孩子的财产?
【发布时间】:2010-06-04 17:07:56
【问题描述】:

我有一个 GroupBox,它是这样定义的

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

我正在像这样使用这个控件

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

那么,我的问题是——我如何将 GroupBox 的 IsEnabled 属性绑定到 Checkbox 属性 IsChecked? 提前致谢。

【问题讨论】:

    标签: silverlight data-binding groupbox


    【解决方案1】:

    没试过,但你应该可以做这样的事情:

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

    【讨论】:

    • 你测试过吗,在这种情况下,TemplatedParent 似乎是 Control 模板中的 ContentPresenter。
    • 没有测试,没有。我的编辑使用 ItemsControl 而不是 GroupBox 对我有用,但概念是一样的。
    • 您的示例将 IsChecked 绑定到 IsEnabled,我需要反之亦然 - IsEnabled 到 IsChecked。
    • @walkor:双向绑定的哪一种方式真的很重要吗?
    • 哦,我没注意到它是双向的。稍后我会检查它,谢谢
    【解决方案2】:

    其实不需要定义DataTemplate。此代码的工作方式相同。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多