我有一个装配,我用他们自己的风格定义了几个海关控制(基于现有的控制)。
对于所有这些我定义静态构造函数,我在其中设置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)));
}
}
在Generic.xaml中声明的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" />
我没有警告,我的风格设置正确。
答案 0 :(得分:1)
我解决了我的问题,我在我的EmListView构造函数中做了一个糟糕的解决方法,如下所示:
pom.xml
如果有人能告诉我为什么我必须为我的自定义ListView控件做这个技巧,我很乐意知道。