2014-09-26 145 views
0

我有一個從ComboBox派生的組件。在它中,我創建了一個依賴屬性「myDependencyProp」,如下面的代碼。但是,在XAML中,當我引用此屬性時,VS表示該類型在ComboBox中不可用,並且不運行該應用程序。當我將ControlTemplate TargetType設置爲my:myComboBox時,它可以正常工作,但VS顯示警告:「myComboBox ControlTemplate TargetType與模板類型ComboBox不匹配」。該應用程序運行正常,但我不喜歡這個警告。我該如何解決它?謝謝! (Obs:my:只是myNameSpaces的一個虛構的別名)。WPF ControlTemplate TargetType匹配

C#:

namespace myNameSpace 
{ 
    public partial class myComboBox : ComboBox 
    { 

     public static readonly DependencyProperty myDependencyPropProperty = 
      DependencyProperty.Register("myDependencyProp", typeof(bool), 
      typeof(myComboBox), new UIPropertyMetadata(false)); 

     public myComboBox() 
     { 
      InitializeComponent(); 
     } 

     public bool IsFirstItemTip 
     { 
      get { return (bool)GetValue(myDependencyPropProperty); } 
      set { SetValue(myDependencyPropProperty, value); } 
     } 
    } 
} 

XAML:

<ComboBox.Resources> 
    <Style x:Key="myComboBox" TargetType="{x:Type ComboBox}"> 
     <Setter Property="SnapsToDevicePixels" Value="true"/> 
     <Setter Property="OverridesDefaultStyle" Value="true"/> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type my:myComboBox}"> 
        <Grid> 
         <ToggleButton 
          ... 
         </ToggleButton> 

         <ContentPresenter 
          ... 
         </ContentPresenter> 

         <Popup 
          ... 
         </Popup> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 

           <Condition Property="SelectedIndex" Value="0"/> 

           <Condition Property="myDependencyProp" Value="True"/> 

          </MultiTrigger.Conditions> 
          <MultiTrigger.Setters> 
           <Setter ... /> 
          </MultiTrigger.Setters> 
         </MultiTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ComboBox.Resources> 
+1

我想你還應該將'Style'的'TargetType'設置爲'「{x:輸入my:myComboBox}」。 – 2014-09-26 18:26:22

回答

1

改變這一行 <Style x:Key="myComboBox" TargetType="{x:Type ComboBox}"><Style x:Key="myComboBox" TargetType="{x:Type my:myComboBox}">擺脫警告。該警告是告訴你,你的風格將隱含獲得適用於所有ComboBoxes但控制模板旨在用於從myComboBox

+0

我做了更改,應用程序仍在運行,但現在警告消息是:「myComboBox TargetType與元素ComboBox的類型不匹配」。 – user3952846 2014-09-26 18:49:59

0

感謝您的答案得到的那些類型,但我通過以下操作解決了這個問題:

首先,我將所有TargetType都返回給{x:Type ComboBox},然後所有的警告都消失了。

後的,而不是使用MultiTrigger如前面介紹的,我用MultiDataTrigger,如下面的代碼:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Path=SelectedIndex, RelativeSource={RelativeSource Self}}" Value="0"/> 
     <Condition Binding="{Binding Path=myDependencyProp, RelativeSource={RelativeSource Self}}" Value="True"/> 
    </MultiDataTrigger.Conditions> 
    <MultiDataTrigger.Setters> 
     <Setter .../> 
    </MultiDataTrigger.Setters> 
</MultiDataTrigger> 

這就是它!

+0

這只是一個黑客(或解決方法)。綁定'路徑'沒有在設計時解析(所以沒有警告),但在運行時它運行正常。 – 2014-09-26 19:56:08

+0

是的,我知道,但以前的所有建議都沒有解決這些警告。目前我還看不到另一種解決方案。 – user3952846 2014-09-26 20:17:19