2012-10-19 35 views
0

的元件的條件造型我有麻煩製造用於下一個問題的通用解決方案:在視覺結構

設想一個自定義TreeView控件一個;; PWS主題化 - 存在單獨的XAML文件元素的列表是用於爲TreeView控件構建一個可視化結構。有onm Border元素,我想根據dsiplayed的數據類型來繪製其背景。此邊框元素是「+」號的一部分,不會通過樣式顯示。

我可以使用後面的代碼來完成此操作,並訂閱此控件提供的一些事件,然後在子元素中查找此邊框並更改其背景。但是,這些代碼會在許多視圖中重複使用,有時完全相同,有時會稍有不同的修改(例如,僅針對類型檢查不同的數據元素)。

有沒有一種方法可以使用其他技術來做到這一點?看起來這裏可以使用樣式選擇器,因爲可視化結構不是在那個指針上構建的,所以我不能通過它的名字來搜索這個元素。而且這個元素不會通過控件上的任何屬性暴露。

編輯:

目前我有我的oqwn控制繼承這個控制,如果你發現thazt可以使用連接/ depenency propertyies來完成:

public class MyTreeView : CustomTreeView 
{ 
} 

如果我埃雷以poaint背景對於行我會創造一個風格選擇:

<local:ProductRowtyleSelector x:Key="productRowStyleSelector" 
           DefaultStyle="{StaticResource defaultProductRowStyle}" 
           GoodStyle="{StaticResource goodProductRowStyle}" 
           ScrapStyle="{StaticResource reworkProductRowStyle}" /> 

凡GoodStyle將繼承樣式存在於控制模板的行。這樣我就可以在任何顯示產品列表的地方使用樣式選擇器。

有沒有類似的方式,我會做相同的邊界元素,我在控制模板中添加?

回答

0

編輯

好吧,如果我得到你需要什麼,你可以試試這個

這樣創建IsTypeOf的IValueConverter:

public class IsTypeOfConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Type parameterType = parameter as Type; 
     if (parameterType == null) 
      throw new ArgumentException(); 

     return parameterType.IsAssignableFrom(value.GetType()); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 
在XAML

然後,把一個DataTrigger在適用風格

<DataTrigger Binding="{Binding Converter={StaticResource IsKindOfConverter}, ConverterParameter={x:Type Person}}"> 
    <Setter Property="Backgroud" Value="Red" /> 
</DataTrigger> 
+0

嗨西西普,我沒有我想要在不同的控件上完成它,我已經繼承了自定義樹視圖,如果可能的話,我想從那裏做。此外,此邏輯需要應用於行級別,這是項目集合的一部分。 – Goran

+0

對不起,我完全錯過了這一點。所以你想瀏覽視覺樹尋找一個特定的項目做一些工作? – Sisyphe

+0

嗨Sisyphe,我所做的是在主題中添加一個Border元素(x:Name =「MyBorder」)到主題中(主題是爲此列表控件創建可視化結構的xaml文件)想象這個列表控件綁定到列表 。在後面的代碼中,在此列表控件中加載一行時,我找到一個名爲「MyBorder」的子元素,並根據Customer的Type屬性設置其背景,現在想象我將此代碼複製粘貼到我有列表的每個視圖。此外,我有列表,產品也有一個類型屬性..你得到的pirture。 – Goran