0

Styles.xaml を含む Silverlight 5 プロジェクトと、実行時に 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>

次に、実行時に DataGrid を生成します。一般的なため、親ページがわかりません:

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 (フィルター) のボタンにクリック イベントを追加するにはどうすればよいですか? 通常、スタイルとコードが同じファイルにあれば問題ありません。

助けてくれてありがとう!

よろしく

ダニエル

4

2 に答える 2

0
<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
    {

    }

これがお役に立てば幸いです

于 2012-07-28T13:33:24.117 に答える
0

データグリッドのヘッダースタイルを設定しているコード ビハインドでボタン コントロールを取得できます。最初に TemplateBinding Height="{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];

これで問題が解決することを願っています。

乾杯!ヴィノード

于 2012-07-29T04:06:41.907 に答える