我创建了一个自定义窗口控件(从Window继承),除状态栏的文本外,一切都很好。我在我的控件中添加了一个名为“StatusText”的新属性,这个文本显示在我控件风格的TextBlock中。
但是当我更改窗口的StatusText属性时,文本不会更改,它不会更新。另一方面,如果我更改了我的窗口的Title属性(这是一个继承的属性),标题会正确更改。
所以也许我没有正确声明我的StatusText属性?或者我需要明确要求我的样式中的TextBlock更新?
感谢您的帮助。
StatusText属性声明:
private string m_StatusText;
public string StatusText
{
get { return m_StatusText; }
set { m_StatusText = value; }
}
状态栏的XAML样式:
<!-- Status area -->
<Border Grid.Row="2" Style="{DynamicResource SFM_StatusAreaStyle}" CornerRadius="0, 0, 7, 7" BorderThickness="1, 1, 1, 0">
<Grid Style="{DynamicResource SFM_TitleBarStyleReflect}">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="6, 0, 0, 2" Foreground="{DynamicResource B_TextColor}"
Text="{Binding Path=StatusText, RelativeSource={RelativeSource AncestorType={x:Type local:SiluForm}, Mode=FindAncestor}}" />
</Grid>
</Border>
答案 0 :(得分:1)
在包含INotifyPropertyChanged
的班级中实施StatusText
,然后在PropertyChanged
的设置器中插入引发StatusText
事件的代码:
public class MyClass : INotifyPropertyChanged
{
private string m_StatusText;
public string StatusText
{
get { return m_StatusText; }
set
{
m_StatusText = value;
raiseOnPropertyChanged("StatusText");
}
}
#region Implementation of INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void raiseOnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
答案 1 :(得分:0)
除了在Eugene上面回答的实现INotifyPropertyChanged接口之外,您可能还需要在自定义窗口类构造函数中设置DataContext = this
。那么你不应该需要RelativeSource绑定。
除非您将自定义窗口的DataContext用于其他目的。