WPF 如何将 DataTrigger 应用于 XAML 中的自定义用户控件 class
WPF how to apply DataTrigger to Custom User Control class in a XAML
我有以下问题。我有一个自定义用户控件,它基本上是一个非常自定义的 ListView,它具有各种类型和过滤器,我在桌面应用程序中多次使用它。 XAML 看起来像这样
<UserControl x:Class="ReportLib.FilteredList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ReportLib"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid x:Name="MainGrid">
<ListView x:Name="lvwData" GridViewColumnHeader.Click="lvwHeaderClick" SizeChanged="lvwData_SizeChanged">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem x:Name="mnuExport" Header="Export to Excel" Click="mnuExport_Click"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="waitGrid" Visibility="Hidden">
<Grid.Effect>
<DropShadowEffect></DropShadowEffect>
</Grid.Effect>
<Rectangle RadiusX="5" RadiusY="5" Stroke="Black" StrokeThickness="1" Fill="White"/>
<StackPanel Margin="2" Orientation="Horizontal" >
<MediaElement Source="waiting.gif" Stretch="UniformToFill" Width="35" Height="25" VerticalAlignment="Center" Margin="10" Volume="0"/>
<TextBlock Text="Please wait" FontSize="24" Margin="0,0,20, 0" VerticalAlignment="Center" HorizontalAlignment="Center" />
</StackPanel>
</Grid>
</Grid>
我在其他 XAMLs/other 项目中使用它
<ReportLib:FilteredList x:Name="myCustomReportList">
我的问题是,现在我制作了一个实时更新的动态网格,我需要对其应用 DataTrigger,但我无法在我的生活中让它发挥作用。
到目前为止,我根据研究和失败的尝试得到了这个
<ReportLib:FilteredList x:Name="lstSessions">
<Style TargetType="{x:Type ReportLib:FilteredList}" BasedOn="{StaticResource {x:Type UserControl}}">
<Style.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="Black" />
</Trigger>
<DataTrigger Binding="{Binding HasError}" Value="True">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
</ReportLib:FilteredList>
但它只在网格中显示 System.Windows.Style,实际的行没有显示。如果我不做任何时尚的 shannanigans 一切都是 displayed/works 正确。我正在寻找任何建议。
提前致谢。
您错过了 Style 属性 标记,因此 Style 元素被识别为列表项。
<ReportLib:FilteredList x:Name="lstSessions">
<ReportLib:FilteredList.Style>
<Style TargetType="ReportLib:FilteredList" ...>
...
</Style>
</ReportLib:FilteredList.Style>
</ReportLib:FilteredList>
我有以下问题。我有一个自定义用户控件,它基本上是一个非常自定义的 ListView,它具有各种类型和过滤器,我在桌面应用程序中多次使用它。 XAML 看起来像这样
<UserControl x:Class="ReportLib.FilteredList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ReportLib"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid x:Name="MainGrid">
<ListView x:Name="lvwData" GridViewColumnHeader.Click="lvwHeaderClick" SizeChanged="lvwData_SizeChanged">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem x:Name="mnuExport" Header="Export to Excel" Click="mnuExport_Click"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="waitGrid" Visibility="Hidden">
<Grid.Effect>
<DropShadowEffect></DropShadowEffect>
</Grid.Effect>
<Rectangle RadiusX="5" RadiusY="5" Stroke="Black" StrokeThickness="1" Fill="White"/>
<StackPanel Margin="2" Orientation="Horizontal" >
<MediaElement Source="waiting.gif" Stretch="UniformToFill" Width="35" Height="25" VerticalAlignment="Center" Margin="10" Volume="0"/>
<TextBlock Text="Please wait" FontSize="24" Margin="0,0,20, 0" VerticalAlignment="Center" HorizontalAlignment="Center" />
</StackPanel>
</Grid>
</Grid>
我在其他 XAMLs/other 项目中使用它
<ReportLib:FilteredList x:Name="myCustomReportList">
我的问题是,现在我制作了一个实时更新的动态网格,我需要对其应用 DataTrigger,但我无法在我的生活中让它发挥作用。
到目前为止,我根据研究和失败的尝试得到了这个
<ReportLib:FilteredList x:Name="lstSessions">
<Style TargetType="{x:Type ReportLib:FilteredList}" BasedOn="{StaticResource {x:Type UserControl}}">
<Style.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="Black" />
</Trigger>
<DataTrigger Binding="{Binding HasError}" Value="True">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
</ReportLib:FilteredList>
但它只在网格中显示 System.Windows.Style,实际的行没有显示。如果我不做任何时尚的 shannanigans 一切都是 displayed/works 正确。我正在寻找任何建议。
提前致谢。
您错过了 Style 属性 标记,因此 Style 元素被识别为列表项。
<ReportLib:FilteredList x:Name="lstSessions">
<ReportLib:FilteredList.Style>
<Style TargetType="ReportLib:FilteredList" ...>
...
</Style>
</ReportLib:FilteredList.Style>
</ReportLib:FilteredList>