当用户类为DataContext时,使用DataTemplate和ContentControl
本文关键字:使用 DataTemplate ContentControl 用户 DataContext | 更新日期: 2023-09-27 18:25:04
我所拥有的:用户级
public class MyButton
{
public String ButtonProperty { get; set; }
public String LabelProperty { get; set; }
public MyButton()
{
ButtonProperty = "MyButtonText!";
LabelProperty = "LabelText!";
}
}
窗口资源中定义的DataTemplate
<Window.Resources>
<DataTemplate DataType="{x:Type local:MyButton}">
<Border Width="100" Height="100" BorderThickness="2" BorderBrush="Aquamarine">
<StackPanel >
<Button>
<TextBlock Text="{Binding ButtonProperty}"></TextBlock>
</Button>
<Label Content="{Binding LabelProperty}"></Label>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
我想DataTemplate将绘制而不是MyButton类的实例
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication7"
Title="MainWindow" Height="500" Width="800">
<Window.Resources>
<DataTemplate DataType="{x:Type local:MyButton}">
<Border Width="100" Height="100" BorderThickness="2" BorderBrush="Aquamarine">
<StackPanel >
<Button>
<TextBlock Text="{Binding ButtonProperty}">
</TextBlock>
</Button>
<Label Content="{Binding LabelProperty}">
</Label>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<!-- Create instance of MyButton in XAML-->
<local:MyButton></local:MyButton>
</Window>
它很好用,但最终不是我想要的。如果MyButton的实例将为Window提供DataContext,该怎么办?
public MainWindow()
{
//Set instance of MyButton as DataContext
DataContext = new MyButton();
InitializeComponent();
}
我想我必须把它写在XAML侧中
<ContentControl DataContext="{Binding}">
<!--MyButton XAML code from DataTemplate here -->
</ContentControl>
instead of
<local:MyButton></local:MyButton>
但它根本不起作用。我做错了什么?
您应该尝试绑定到ContentControl的Content属性,而不是DataContext属性:
<ContentControl Content={Binding } />
此外,ContentControl的DataContext已经是MyButton。
我真的不确定你想在那里实现什么。如果你只是想扩展默认按钮的功能,你可以定义附加属性
为什么您希望窗口的DataContext是按钮?也许相反?不确定我是否正确理解了那个部分。