Blu*_*ron 8 .net c# wpf .net-4.0 wpf-4.0
这是我最接近创建一个简单的触发器.我只想要datagrid的IsMouseOver == true来显示按钮.问题是Setter的TargetName说:属性'TargetName'不代表'Setter'的有效目标,因为找不到名为'ButtonExpand'的元素.确保在使用目标的任何Setter,Triggers或Conditions之前声明目标.我究竟做错了什么?
<UserControl.Resources>
<Style TargetType="DataGrid">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ButtonExpand" Property="Visibility" Value="Visible" />
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<DataGrid Name="MainDataGrid" ItemsSource="{Binding Programs}" IsReadOnly="True" AutoGenerateColumns="false" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Version" Binding="{Binding Version}"/>
<DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/>
</DataGrid.Columns>
</DataGrid>
<Button Name="ButtonExpand" Height="25" Width="25" HorizontalAlignment="Right" VerticalAlignment="Bottom" Visibility="Hidden">+</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
Fre*_*lad 22
TargetName不适用于Style的Triggers集合.样式没有名称范围,因此在那里按名称引用元素没有意义.但是模板(DataTemplate或ControlTemplate)确实有一个名称范围.
看到这个链接.
您可以使用Button的DataTrigger进行相反的操作.请注意,必须在Style中设置Property Visibility才能使DataTrigger正常工作.
<Grid Name="MainGrid">
<DataGrid ItemsSource="{Binding Programs}"
IsReadOnly="True"
AutoGenerateColumns="false" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Version" Binding="{Binding Version}"/>
<DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/>
</DataGrid.Columns>
</DataGrid>
<Button Name="ButtonExpand"
Height="25"
Width="25"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Content="+">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MainGrid,
Path=IsMouseOver}"
Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用转换器将ButtonExpand的Visibilty绑定到DataGrid的IsMouseOver属性.
| 归档时间: |
|
| 查看次数: |
31423 次 |
| 最近记录: |