我对WPF有疑问。有两个组成部分。 1. MainWindow 2. ClothesController:UserControl
MainWindow将类“Shoes”的实例设置为“shoes1”,其属性值为“Size”= 170.此实例作为“DataContext”附加到MainWindow,可以通过Label控件“label_1”轻松引用。因此,label_1显示170.良好的预期。
我做了一个用户控件; ClothesController 它有一个DependencyProperty'Value'并绑定到UserControl。标签控件使用与'MainWindow'相同的方法引用该值。默认值为零。
通过这个控件,我做了两个'ClothesController'实例。 使用公开的DP'Value',我为一个实例分配了一个值作为绑定,而另一个实例,我只是在XAML中直接分配了一个整数。
结果是 controller_1为0; DP的默认值 controller_2是180;正如所料 label_1是170;正如预期的那样
我无法理解这一点。我错过了什么吗? 我是WPF的新手,所以我认为无论控件的类型是什么,如果它具有可修改的属性,那么无论输入是什么,如果类型与属性匹配,都应该引用它。
这是完整的代码。从MainWindow到Usercontrol
++主窗口
docker-machine ssh default free
++ cs for MainWindow
<Window x:Class="FieldUserControl_test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:FieldUserControl_test"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<local:ClothesController Name = "controller_1" VerticalAlignment="Center" Grid.Row="0" Value="{Binding Path=Size}" Label="Size"/>
<local:ClothesController Name = "controller_2" VerticalAlignment="Center" Grid.Row="1" Value="{Binding Path=Height, ElementName=LayoutRoot}" Label="Height"/>
<Label Name = "label_1" Grid.Row="2" Content="{Binding Path=Size}"/>
</Grid>
</Window>
++用户控件; ClothesController
namespace FieldUserControl_test
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Shoes shoes1 = new Shoes() { Size = 170, Height = 200 };
LayoutRoot.DataContext = shoes1;
}
}
public class Clothes
{
public int Size { set; get; }
public int Height { set; get; }
}
public class Shoes : Clothes
{
}
}
用于UserControl的++ cs
<UserControl x:Class="FieldUserControl_test.ClothesController"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:FieldUserControl_test"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="100">
<Grid Name="GridRoot" Background="AliceBlue">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{Binding Path=Label}" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/>
<TextBox Name="Tb_shoes_size" Text="{Binding Path=Value}" VerticalAlignment="Center" Grid.Row="0" Grid.Column="1"/>
</Grid>
</UserControl>