Wpf Silverlight DataGridColumnHeader中按钮的事件处理

Wpf Silverlight DataGridColumnHeader中按钮的事件处理,wpf,silverlight,events,datagrid,styles,Wpf,Silverlight,Events,Datagrid,Styles,我有一个Silverlight 5项目,其中包含Styles.xaml和另一个类,我在运行时在其中创建了一个DataGrid。我想在DataGridColumnHeader中有一些按钮来实现某种过滤功能。样式定义如下: <Style x:Key="DataGridFilterStyle" TargetType="sdk:DataGridColumnHeader"> <Setter Property="ContentTemplate"> <Se

我有一个Silverlight 5项目,其中包含Styles.xaml和另一个类,我在运行时在其中创建了一个DataGrid。我想在DataGridColumnHeader中有一些按钮来实现某种过滤功能。样式定义如下:

<Style x:Key="DataGridFilterStyle" TargetType="sdk:DataGridColumnHeader">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid Height="{TemplateBinding Height}" Width="Auto">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <StackPanel Orientation="Horizontal" Margin="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                        <TextBlock Text="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0.2"/>
                        <Button Content="Foo" Margin="5,0" x:Name="filter" />
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>
因此,我有我的Styles.xaml和一个单独的类,我在其中执行一些事件。如何向DataGridColumnHeader(筛选器)中的按钮添加单击事件?通常,如果样式和代码位于同一个文件中,则不会有问题

谢谢你的帮助

问候

丹尼尔


//xaml
私有无效筛选器\u单击(对象发送方,RoutedEventArgs e)//代码隐藏
{
}

我希望这将有助于

您可以在设置datagrid headerstyle的地方获得隐藏在代码中的button控件。您需要首先删除TemplateBindingHeight=“{TemplateBinding Height}

下面是在代码隐藏中获取按钮控件的代码

 var style =  Application.Current.Resources["DataGridFilterStyle"] as Style;
        dataGrid1.ColumnHeaderStyle = style;
        style = dataGrid1.ColumnHeaderStyle;
        var setter = style.Setters.FirstOrDefault();
        var k = setter as Setter;
        var val = k.Value as DataTemplate;
        var obj = val.LoadContent() as Grid;
        var button = (obj.Children[0] as StackPanel).Children[1];
希望这能解决你的问题

干杯!
Vinod

您是否尝试过使用按钮上的,而不是
单击事件处理程序?好的,使用命令解决了我的问题!非常感谢。抱歉,不是真的,因为sub与xaml不在同一代码中。样式是在Styles.xaml中定义的,它没有代码隐藏,事件处理程序应该在另一个类中定义。这是一个很好的示例,我可以获取按钮并更改其属性。但它们不会被重新纳入时尚。因此,如果我添加了click事件,甚至更改了Content属性,我就看不到这些更改。也许,我必须将更改后的按钮对象放回样式中。但我如何才能做到这一点呢?
 var style =  Application.Current.Resources["DataGridFilterStyle"] as Style;
        dataGrid1.ColumnHeaderStyle = style;
        style = dataGrid1.ColumnHeaderStyle;
        var setter = style.Setters.FirstOrDefault();
        var k = setter as Setter;
        var val = k.Value as DataTemplate;
        var obj = val.LoadContent() as Grid;
        var button = (obj.Children[0] as StackPanel).Children[1];