无法将WPF TextBlock绑定到Property

时间:2017-02-23 16:54:38

标签: wpf xaml data-binding

在我的项目中,我有一个自定义控件,它是一个扩展器。使控件展开或折叠的按钮内容应根据状态而变化。我得到了大部分工作,但我没有将文本绑定到我用于按钮的内容。

这是来自Generic.xaml的我的XAML代码:

<ControlTemplate x:Key="PndExpanderControlVertical" TargetType="{x:Type local:PndExpanderControl}">
    <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>

            <dx:DXExpander x:Name="expander" Grid.Column="0" FlowDirection="LeftToRight" VerticalExpand="None" HorizontalExpand="FromLeftToRight" IsExpanded="True">
                <dxlc:GroupBox x:Name="group_box" Padding="0" Header="Header"/>
            </dx:DXExpander>

            <Button Grid.Column="1" Padding="1" x:Name="expand_button">
                <Button.Style>
                    <Style TargetType="Button">
                        <Style.Triggers>
                            <!-- Button-Style, expanded -->
                            <DataTrigger Binding="{Binding IsExpanded, ElementName=expander}" Value="True">
                                <Setter Property="Content" Value="↧ ↧"/>
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <RotateTransform Angle="90"/>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                            <!-- Button-Style, collapsed -->
                            <DataTrigger Binding="{Binding IsExpanded, ElementName=expander}" Value="False">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        <TextBlock>
                                            <TextBlock Text="↥ "/>
                                            <TextBlock Text="{Binding Header, ElementName=group_box}"/>
                                            <TextBlock Text=" ↥"/>
                                        </TextBlock>
                                    </Setter.Value>
                                </Setter>
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <RotateTransform Angle="90"/>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>
        </Grid>
    </Border>
</ControlTemplate>

如您所见,我使用嵌套文本块将group_box的标题与一些箭头组合在一起。但是,中间文本块的绑定不起作用。

老实说,我现在和WPF合作了一段时间,但数据绑定(对于正确的来源)对我来说仍然是一个谜。大多数时候我以某种方式让它工作,但如果它失败了我不知道该怎么做。我用谷歌搜索了几个小时并尝试了各种各样的东西,但没有任何对我有用。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以绑定Header的{​​{1}}的{​​{1}}:

Content

您无法使用Expander直接绑定到<TextBlock Text="↥ "/> <TextBlock Text="{Binding Content.Header, ElementName=expander}"/> <TextBlock Text=" ↥"/> ,因为它与ElementName的名称范围不同。

修改

好的,它仅在默认情况下折叠扩展器时才有效。

但您可以使用GroupBox绑定到Button

x:Reference