[英]Set style of extended TreeViewItem based on an extended property value
我擴展了TreeViewItem類,允許我在樹視圖項中存儲額外的數據。 我希望能夠根據我添加的擴展屬性之一的值設置treeview項的樣式。
到目前為止,我有:
namespace GX3GUIControls
{
public class GX3TreeViewItem : TreeViewItem
{
public bool Archived { get; set; }
public object Value { get; set; }
}
}
<src:GX3ClientPlugin.Resources>
<Style TargetType="{x:Type Controls:GX3TreeViewItem}">
<Style.Triggers>
<DataTrigger Archived="True">
<Setter Property="Background" Value="Gray" />
<Setter Property="FontStyle" Value="Italic" />
</DataTrigger>
</Style.Triggers>
</Style>
</src:GX3ClientPlugin.Resources>
但我收到錯誤 - 錯誤1在'DataTrigger類型中找不到屬性'已存檔'
DataTrigger沒有Archived屬性,但您可以通過Binding屬性將<DataTrigger Binding="{Binding Path=Archived}" Value="True">
屬性綁定到它,如此<DataTrigger Binding="{Binding Path=Archived}" Value="True">
要通知您的觀點,Achived屬性是否發生變化,您可以:
1.在GX3TreeViewItem
-class中實現INotifyPropertyChanged接口: public class GX3TreeViewItem : TreeViewItem, INotifyPropertyChanged
,創建一個引發PropertyChanged事件的方法:
private void PropertyChanged(string prop)
{
if( PropertyChanged != null )
{
PropertyChanged(this, new PropertyChangedEventArgs(prop);
}
}
並將此方法放在屬性的setter中:
private bool _achived;
public bool Achived
{
get
{
return _achived;
}
set
{
_achived = value;
PropertyChanged("Achived");
}
}
2.或者讓你的屬性成為DependencyProperty
。
老實說,你似乎做錯了。 這些屬性應該在您的數據上。
你可以這樣做,
Style="{Binding Path=Archived, Converter={StaticResource GetStyle}}"
GetStyle是一個IValueConverter,無需擴展TreeView imo。
這不是實現此目的的正確方法。 你應該看看MVVM模式 。
您的UI不是“存儲額外數據”的適當位置。 UI是UI,數據是數據。 這是來自winforms或其他非WPF背景的人所犯的最大錯誤,在WPF中使用錯誤的方法和錯誤的心態。
這將無效(因為TreeView
的ItemContainerGenerator
對您的類一無所知,或者需要額外的工作來覆蓋此類的默認行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.