In meinem Projekt habe ich ein benutzerdefiniertes Steuerelement, das ein Expander ist. Der Inhalt der Schaltfläche, durch den das Steuerelement erweitert oder reduziert wird, sollte sich je nach Status ändern. Ich habe das meiste davon zu arbeiten, aber ich scheitere Text an den Inhalt, den ich für den Knopf verwende.WPF TextBlock kann nicht an die Eigenschaft gebunden werden
Hier ist mein XAML-Code aus generic.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>
Wie man sehen kann ich einen verschachtelten Textblock der group_box Header mit einigen Pfeilen zu kombinieren. Die Bindung des mittleren Textblocks funktioniert jedoch nicht.
Um ehrlich zu sein, arbeite ich seit einiger Zeit mit WPF, aber Datenbindung (an die richtige Quelle) ist für mich immer noch ein Rätsel. Die meiste Zeit bekomme ich es irgendwie zur Arbeit, aber wenn es scheitert, habe ich keine Idee, was zu tun ist. Ich habe ein paar Stunden gegoogelt und verschiedene Sachen probiert, aber nichts hat für mich funktioniert.
Jede Hilfe wird geschätzt.
Leider funktioniert das nicht. Die Ausgabe sagt "System.Windows.Data Error: 4: Quelle für die Bindung mit Verweis nicht gefunden" ElementName = Expander '. BindingExpression: Path = Content.Header; DataItem = null; Zielelement ist' TextBlock '(Name =' '); Ziel Eigenschaft ist 'Text' (Typ 'String') " – Takiro
Danke, das funktioniert perfekt. Können Sie erklären, warum x: Referenz verwendet werden muss? Von dem, was ich in einer schnellen Suche gefunden habe Elementname und x: Referenz arbeiten grundsätzlich gleich. Auch MSDN sagt: "Für die meisten WPF-Anwendungen und -Szenarien sollte die ElementName-Bindung weiterhin verwendet werden." – Takiro
Informationen zu den Unterschieden zwischen ElementName und x finden Sie in der folgenden Frage: Referenz: http://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname – mm8