首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight DataGridColumnHeader中按钮的事件处理

Silverlight DataGridColumnHeader中按钮的事件处理
EN

Stack Overflow用户
提问于 2012-07-28 18:44:51
回答 2查看 705关注 0票数 0

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

代码语言:javascript
复制
<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>

然后,我在运行时生成一个DataGrid。我不知道父页面,因为它是通用的:

代码语言:javascript
复制
dg = New DataGrid
dg.AutoGenerateColumns = False
dg.RowHeight = 28
' Doing some stuff here....
dg.ColumnHeaderStyle = Application.Current.Resources("DataGridFilterStyle")
gd.Children.Add(dg)  ' gd is a Grid as a parent container

所以,我有我的Styles.xaml和一个单独的类,我在其中做一些事件。如何将单击事件添加到DataGridColumnHeader (筛选器)中的按钮?通常,如果样式和代码在同一个文件中,这不是问题。

谢谢你的帮助!

问候

丹尼尔

EN

回答 2

Stack Overflow用户

发布于 2012-07-28 21:33:24

代码语言:javascript
复制
<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" Click="filter_Click" /> //xaml
    </StackPanel>

private void filter_Click(object sender, RoutedEventArgs e) //code behind
    {

    }

我希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2012-07-29 12:06:42

在设置datagrid headerstyle的地方,你可以在按钮控件后面的代码中获得它。您需要先删除TemplateBinding Height="{TemplateBinding }“

下面是在代码后面获取按钮控件的代码。

代码语言:javascript
复制
 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];

希望这能解决你的问题。

干杯!维诺德

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11700314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档