У меня есть сборка, где я определяю несколько элементов управления таможней (на основе существующего элемента управления) с их собственным стилем.Стиль, не работающий с пользовательским ListView
Для всех из них я определяю статический конструктор, где я устанавливаю DefaultStyleKeyProperty и добавляю файл стиля XAML в Themes/Generic.xaml.
Он работает отлично для всех из них, за исключением моего пользовательского ListView .. Это сводит меня с ума!
Вот краткий пример:
public class EmListView : ListView
{
/// <summary>
/// Constructor
/// </summary>
static EmListView()
{
// Set the default style type
DefaultStyleKeyProperty.OverrideMetadata(typeof(EmListView), new FrameworkPropertyMetadata(typeof(EmListView)));
}
}
XAML файл объявлен в Generic.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?
спасибо.
EDIT:
я что-то заметил, что, кажется, что это заявление моего 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" />
У меня нет никакого предупреждения, и мой стиль установлен правильно.