私のプロジェクトでは、私はエキスパンダーであるカスタムコントロールを持っています。コントロールの展開または折りたたみを行うボタンのコンテンツは、状態によって変わる必要があります。私は仕事のほとんどを持っているが、私はボタンのために使用するコンテンツにテキストをバインドするのに失敗する。ここでプロパティにバインドするWPF TextBlockを取得できません
は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を使っていますが、データソースを(適切なソースに)バインドすることはまだ私にとって謎です。ほとんどの場合、私は何とかそれを働かせますが、失敗した場合、私はアイデアを何もしません。私は数時間グーグルで試してみましたが、さまざまなことを試みましたが、何も私のために働いていませ
何か助けていただければ幸いです。
残念ながら、これは動作しません。 BindingExpression:Path = Content.Header; DataItem = null;対象要素が 'TextBlock'(Name = '');であり、出力が "System.Windows.Data Error:4:参照 'ElementName = expander' targetプロパティは 'Text'(タイプ 'String') " – Takiro
ありがとう、これは完全に動作します。 x:Referenceを使用する必要がある理由を説明できますか? ElementNameとx:Referenceは基本的に同じように動作します。また、MSDNによれば、「ほとんどのWPFアプリケーションとシナリオでは、ElementNameバインディングを使用する必要があります。 – Takiro
ElementNameとxの違いについては、次の質問を参照してください。参照:http://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname – mm8