2
我正在製作一個自定義控件,它有兩種非常不同的樣式需求。一個用於基本外觀,另一個用於更高級的外觀。兩種風格之間的自定義控件切換
我的控件包含一個依賴屬性爲以下枚舉:
public enum ControlTypes
{
Basic,
Advanced
}
我創建了兩種風格在generic.xaml(具有非常不同的模板),並給每一個關鍵。
在枚舉屬性的更改處理程序內我試圖找到樣式並設置正確的。
private static void OnControlTypePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var myCustomControl = (MyCustomControl)d;
var basicControlStyle = Application.Current.TryFindResource("BasicControlStyle") as Style;
var advancedControlStyle = Application.Current.TryFindResource("AdvancedControlStyle") as Style;
if (myCustomControl.ControlType == ControlTypes.Basic)
myCustomControl.Style = basicControlStyle;
else if (myCustomControl.ControlType == ControlTypes.Advanced)
myCustomControl.Style = advancedControlStyle;
}
這兩種樣式總是空的。我不確定如何從generic.xaml中獲取樣式。還是有更好的方式來交換我的風格?
如何簡單地將每個容器的Visible屬性綁定到枚舉的當前值? – kenny
控件有幾個必需的部分,兩個模板都是相同的(儘管模板完全不同)。我目前在ApplyTemplate覆蓋內找到模板部分。如果我給每個部件一個唯一的名稱,並且在控件類型更改時重新獲取它們(使用每個部件的第二個名稱),那麼您的建議將起作用。這個古怪的設計將很好地避免。 – mbursill
在這種情況下,您可以將Visibility屬性綁定到控件中的「IsAdvancedStyle」屬性(而不是通過控件中的名稱引用所有內容) - 但這不是最佳解決方案。 Application.Current.TryFindResource的結果是否返回null?它是否返回一個非'樣式'實例?不要忘記資源名稱區分大小寫。 'generic.xaml'是否已正確添加到主應用程序資源集合中? – fatty