如何在ChangePropertyAction WPF的TargetObject中找到父视图的ElementName(XAML)?

时间:2015-12-17 09:27:56

标签: wpf xaml datagrid datatrigger interaction

我有DataGrid,Grid有一个Filter Function。过滤器图标按钮在app.xaml中设置为DataGridColumnHeader,我将样式附加到我的DataGrid。如果Button获得Click,则会打开Filter Popup以执行Filter。 Popup是在父视图XAML中设计的。

DataGrid View XAML继承父视图XAML。现在我需要在Popup中设置ElementName = autoFilter,或者在Filter Icon Button中设置ElementName = popFilter。我无法在WPF中使用ChangePropertyAction的TargetObject调用控件。请帮助。

DataGrid视图:gridView.xaml

<DataGrid Name="EmpList" ColumnHeaderStyle="{StaticResource FilterDataGridColumnHeader}" AutoGenerateColumns="False" ItemsSource="{Binding EmpList}">
   <DataGrid.Columns>
       <DataGridTextColumn Binding="{Binding Name}" Header="Employee Name" ElementStyle="{StaticResource DataGridElementStyle}" />
       <DataGridTextColumn Binding="{Binding Age}" Header="Employee Age" ElementStyle="{StaticResource DataGridElementStyle}" />
   </DataGrid.Columns>
</DataGrid>

父视图包含弹出窗口:MainView.xaml

<Popup Name="popFilter" Placement="Mouse" StaysOpen="False" Width="200" IsOpen="{Binding IsPopupFilterOpen, Mode=TwoWay}">
        <i:Interaction.Triggers>
        <i:EventTrigger EventName="Opened">
            <ei:ChangePropertyAction TargetObject="{Binding ElementName=autofilter}" PropertyName="Visibility"/>
        </i:EventTrigger>
        <i:EventTrigger EventName="Closed">
            <ei:ChangePropertyAction TargetObject="{Binding ElementName=autofilter}" PropertyName="Visibility">
                <ei:ChangePropertyAction.Value>
                    <Visibility>Collapsed</Visibility>
                </ei:ChangePropertyAction.Value>
            </ei:ChangePropertyAction>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <Border Background="White" BorderBrush="Gray" BorderThickness="1,1,1,1">
        <StackPanel Margin="5,5,5,15">
            <TextBlock Text="Welcome to Popup Window" />
        </StackPanel>
    </Border>
</Popup>

ColumnHeaderStyle中的过滤器图标按钮:app.xaml

<Application.Resources>
    <Style TargetType="{x:Type DataGridColumnHeader}" x:Key="FilterDataGridColumnHeader">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                    <Grid>
                        <Button Grid.Column="2" Background="Yellow">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="MouseEnter">
                                    <ei:ChangePropertyAction TargetObject="{Binding ElementName=autofilter}" PropertyName="Visibility">
                                        <ei:ChangePropertyAction.Value>
                                            <Visibility>Visible</Visibility>
                                        </ei:ChangePropertyAction.Value>
                                    </ei:ChangePropertyAction>
                                </i:EventTrigger>
                                <i:EventTrigger EventName="MouseLeave">
                                    <ei:ChangePropertyAction TargetObject="{Binding ElementName=autofilter}" PropertyName="Visibility">
                                        <ei:ChangePropertyAction.Value>
                                            <Visibility>Collapsed</Visibility>
                                        </ei:ChangePropertyAction.Value>
                                    </ei:ChangePropertyAction>
                                </i:EventTrigger>
                                <i:EventTrigger EventName="Click">
                                    <ei:ChangePropertyAction TargetObject="{Binding ElementName=popFilter}" PropertyName="IsOpen">
                                        <ei:ChangePropertyAction.Value>True</ei:ChangePropertyAction.Value>
                                    </ei:ChangePropertyAction>
                                </i:EventTrigger>

                            </i:Interaction.Triggers>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="20"/>
                                    <ColumnDefinition/>
                                    <ColumnDefinition Width="20"/>
                                </Grid.ColumnDefinitions>
                                <ContentPresenter x:Name="contentPresenter" Grid.Column="1"/>
                                <ContentControl x:Name="autofilter" Visibility="Collapsed" ContentTemplate="{StaticResource FilterButtonStyleKey}"  Margin="0 0 3 0"/>
                            </Grid>
                        </Button>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

图标按钮图像键:FilterButtonStyleKey

<DataTemplate x:Key="FilterButtonStyleKey">
    <Canvas Height="15.898" Width="15.297" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Transparent">
        <Path Data="M16.0117,6.7368C18.3417,6.7368,20.6727,6.7358,23.0027,6.7378C23.5327,6.7378,23.5977,6.8308,23.6437,7.3438C23.7027,7.9958,23.4897,8.4748,23.0197,8.9548C21.4107,10.5968,19.8547,12.2888,18.2957,13.9788C18.1647,14.1208,18.1137,14.3828,18.1117,14.5898C18.0987,17.0608,18.1067,19.5308,18.0907,22.0018C18.0887,22.2158,18.0077,22.4968,17.8607,22.6158C17.7697,22.6878,17.4587,22.5408,17.2807,22.4368C16.3057,21.8718,15.3447,21.2788,14.3677,20.7148C14.0637,20.5408,13.9287,20.3278,13.9297,19.9728C13.9407,18.1778,13.9257,16.3848,13.9357,14.5908C13.9367,14.2698,13.8367,14.0388,13.6137,13.8058C12.1347,12.2548,10.6717,10.6898,9.2027,9.1298C9.0967,9.0168,8.9927,8.9018,8.8797,8.7958C8.4137,8.3608,8.2387,7.6118,8.4377,7.0158C8.5277,6.7478,8.7137,6.7358,8.9347,6.7368C10.0937,6.7388,11.2517,6.7378,12.4097,6.7378C13.6107,6.7378,14.8107,6.7378,16.0117,6.7368z" Height="16.898" Canvas.Left="-0.5" StrokeStartLineCap="Round" Stretch="Fill" StrokeEndLineCap="Round" Stroke="#FF323232" StrokeThickness="1" StrokeLineJoin="Round" Canvas.Top="-0.5" Width="16.297"/>
        <Path Data="M14.2427,14.3921L17.9117,14.3921" Height="1" Canvas.Left="5.386" StrokeStartLineCap="Round" Stretch="Fill" StrokeEndLineCap="Round" Stroke="#FF323232" StrokeThickness="1" StrokeLineJoin="Round" Canvas.Top="7.156" Width="4.669"/>
    </Canvas>
</DataTemplate>

我需要在相应列的鼠标悬停事件上显示(可见性:可见)过滤器图标按钮,或者如果用户可以单击过滤器图标按钮,则会打开过滤器弹出窗口并显示图标应显示的时间 - 过滤器弹出窗口IsOpen =真状态。在弹出窗口关闭时,过滤器图标按钮应该折叠,而在图标按钮上单击,否则鼠标悬停不会发生。

  

注意:

     

在一个XAML中设计Datagrid,Filter Popup应该在Main中   查看XAML,DataGrid XAML继承主视图XAML。

     

过滤器图标是在app.xaml中设计的按钮,并调用Style in   DataGrid。

0 个答案:

没有答案