2015-10-12 29 views
1

我有一個程序集,其中我定義了幾種海關控件(基於現有的控件)與自己的風格。風格與自定義列表視圖不工作

對於他們所有我定義的靜態構造函數,我設置DefaultStyleKeyProperty並將樣式XAML文件添加到Themes/Generic.xaml。

它工作正常,除了我自定義ListView ..所有這些讓我瘋狂!

這裏是一個簡短的樣本:在Generic.xaml宣佈

public class EmListView : ListView 
{ 
    /// <summary> 
    /// Constructor 
    /// </summary> 
    static EmListView() 
    { 
     // Set the default style type 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(EmListView), new FrameworkPropertyMetadata(typeof(EmListView))); 
    } 
} 

XAML文件:

<Style TargetType="{x:Type ui:EmListView}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="True"/> 
    <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ui:EmListView}"> 

       <Border Name="Border" Style="{DynamicResource EMLV_ListViewBorderStyle}" Margin="50"> 
        <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"> 
         <ItemsPresenter /> 
        </ScrollViewer> 
       </Border> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsGrouping" Value="true"> 
         <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
        </Trigger> 

        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="Opacity" Value="0.3" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

我不知道爲什麼,但也只有這樣,才能得到應用在我的EmListView我的風格在使用它時強制風格,如:

<ui:EmListView Margin="5" Style="{DynamicResource {x:Type ui:EmListView}}"> 

我有EmWindow,EmButton,..所有的應用風格自動除了ListView。有什麼特別的ListView?

謝謝。

編輯:

我看到的東西,它似乎是我的EmListView的引起麻煩的聲明。

這裏是一個窗口內的樣本聲明:

   <ui:EmListView Margin="5"> 
       <ui:EmListView.View> 
        <GridView> 

         <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" /> 

         <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" /> 

         <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" /> 

         <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" /> 

        </GridView> 
       </ui:EmListView.View> 
      </ui:EmListView> 

風格不適用,它不斷地扔我一個警告說,它不能在樣式定義OverridesDefaultStyle屬性。

如果我只是聲明它是這樣的:

<ui:EmListView Margin="5" /> 

我沒有警告,我的風格是否設置正確。

回答

1

我解決我的問題,我做了一個糟糕的解決辦法,我EmListView構造如下:

public EmListView() 
    { 
     Style defaultStyle = (Style)Application.Current.TryFindResource(typeof(EmListView)); 
     if (defaultStyle != null) 
     { 
      this.OverridesDefaultStyle = true; 
      this.Style = defaultStyle; 
     } 
    } 

如果有人能告訴我爲什麼我要做這招只爲我定製的ListView控件我會很高興知道。