1
我是WPF數據綁定/樣式/模板的新手... 我想通過使用樣式將一組屬性值應用於按鈕。樣式綁定到類的字段。正如你所看到的,這對BackColor屬性工作正常。但是,當我嘗試設置TextBlock的文本時,它不起作用(我也沒有收到綁定錯誤)。我的最終目標是也能夠將圖像設置爲內容。如何在一個樣式中的WPF DataTemplate中使用綁定
當我不使用DataTemplate並使用SetterProperty =「Content」而不是「ContentTemplate」時,它將適用於一個按鈕,但是當添加第二個按鈕時,它會給我一個運行時錯誤「指定的元素已經是另一個元素的邏輯子元素,首先斷開它。「
我在這裏錯過了什麼?我該怎麼投入「的TextBlock文本=」 ???」
順便說一句,我想樣式移動到全球範圍內,一旦它的作品,所以我不希望使用任何明確指的是MyClass的
<Window.Resources>
<Style TargetType="Button" x:Key="MyStyle">
<Setter Property="Background" Value="{Binding BackColor}"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="XYZ-"/>
<TextBlock Text="{Binding Text}"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel Orientation="Horizontal" Height="30">
<Button Style="{StaticResource MyStyle}" DataContext="{Binding Action1}"/>
<Button Style="{StaticResource MyStyle}" DataContext="{Binding Action1}"/>
<Button Style="{StaticResource MyStyle}" DataContext="{Binding Action2}"/>
<Button Style="{StaticResource MyStyle}" DataContext="{Binding Action2}"/>
</StackPanel>
和
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
Action1 = new MyClass() { Text = "ACTION1", BackColor = new SolidColorBrush(Colors.Red) };
Action2 = new MyClass() { Text = "ACTION2", BackColor = new SolidColorBrush(Colors.Green) };
}
public MyClass Action1{get; private set;}
public MyClass Action2{get; private set;}
}
public class MyClass
{
public string Text { get; set; }
public Brush BackColor { get; set; }
}
謝謝您的回答會更好。是的,這是有效的,但是我需要在內容下面有更多可見的對象。我編輯我的代碼示例來澄清這一點。 – Night94 2012-03-27 19:41:16
我的更新答案有幫助嗎? – Phil 2012-03-30 09:31:18
沒有。使用相對的源代碼綁定產生與我上面的代碼相同的結果。它適用於將樣式應用於一個按鈕,但是對於多個按鈕,我仍然得到相同的異常:「指定的元素已經是另一個元素的邏輯子元素,請先斷開它。 – Night94 2012-03-30 12:41:10