当用户类为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>

但它根本不起作用。我做错了什么?

当用户类为DataContext时,使用DataTemplate和ContentControl

您应该尝试绑定到ContentControl的Content属性,而不是DataContext属性:

<ContentControl Content={Binding } />

此外,ContentControl的DataContext已经是MyButton。

我真的不确定你想在那里实现什么。如果你只是想扩展默认按钮的功能,你可以定义附加属性

为什么您希望窗口的DataContext是按钮?也许相反?不确定我是否正确理解了那个部分。