我创建了一个UserControl,它是(在其最小化形式中,为了这个问题)一个Grid内的TextBlock。其Text
属性绑定到代码隐藏中名为DependencyProperty
的{{1}}。
在我的主XAML页面上,我将此控件放在TitleText
:
Grid
问题是在设计时,所有这些控件中的文本显示 last 实例的值!
截屏:
我的UserControl的相关XAML如下所示:
<usercontrols:ProgramButton TitleText="Top left" Grid.Row="0" Grid.Column="0" x:Name="pbTopLeft" />
<usercontrols:ProgramButton TitleText="Bottom left" Grid.Row="1" Grid.Column="0" x:Name="pbBottomLeft" />
<usercontrols:ProgramButton TitleText="Top right" Grid.Row="0" Grid.Column="1" x:Name="pbTopRight" />
<usercontrols:ProgramButton TitleText="Bottom right" Grid.Row="1" Grid.Column="1" x:Name="pbBottomRight" />
我的UserControl的相关代码隐藏如下:
<UserControl
...
x:Name="Root"
...
>
<Grid Background="Gray" Padding="25">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" x:Name="TitleTextbox"
Foreground="DarkGray"
FontSize="40"
HorizontalAlignment="Center"
Text="{Binding ElementName=Root, Path=TitleText}" />
</Grid>
我似乎无法找出为什么每个控件实例都显示“右下角”。 UserControl的“Root”为public string TitleText
{
get { return TitleTextBox.Text; }
set { SetValue(TitleTextProperty, value); }
}
public static readonly DependencyProperty TitleTextProperty = DependencyProperty.Register(
"TitleText", typeof(string), typeof(ProgramButton), new PropertyMetadata(
new PropertyChangedCallback(TitleTextCallback)));
public static void TitleTextCallback(
DependencyObject o, DependencyPropertyChangedEventArgs e)
{
(o as ProgramButton).TitleTextBox.Text = e.NewValue.ToString();
}
值,用作绑定x:Name
的{{1}}。这又被声明为ElementName
,注册为“TitleText”。每个都有一个唯一的Path=TitleText
标识符,所以我不知道为什么这不能按预期工作。
有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
对于初学者来说,TitleTextCallback是不必要的,因为已经设置了与TitleText的绑定。 TitleText的Getter应如下所示:
get { return (string)GetValue(TitleTextProperty); }