0

C# のみを使用して、この XAML テンプレートを作成したいと思います。

<DataGrid AlternationCount="2" AutoGenerateColumns="False" Margin="6,78,9,47" Name="datagrid_Jobs">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Title, Mode=OneWay}" Header="Job" />
        <DataGridTextColumn Binding="{Binding Mode=TwoWay, Path=Score}" Header="Score" />
        <DataGridTemplateColumn Header="Perecent Complete">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Slider Margin="5" Maximum="100" Minimum="0" Value="{Binding Path=Score, UpdateSourceTrigger=PropertyChanged}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

XAML でグリッドを定義したいだけで、テンプレート全体を C# で作成したいと考えています。
どこから始めればよいかわかりません。

4

2 に答える 2

0

FrameworkElementFactory( msdn )を使用する必要があります。

XAML:

<DataGrid AlternationCount="2" AutoGenerateColumns="False" Margin="6,78,9,47" Name="datagrid_Jobs"
          Loaded="datagrid_Jobs_Loaded">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Title, Mode=OneWay}" Header="Job" />
        <DataGridTextColumn Binding="{Binding Mode=TwoWay, Path=Score}" Header="Score" />
        <DataGridTemplateColumn x:Name="pcColumn" Header="Perecent Complete" />
    </DataGrid.Columns>
</DataGrid>

分離コード:

public void datagrid_Jobs_Loaded(object sender, EventArgs e)
{
    FrameworkElementFactory sliderHolder = new FrameworkElementFactory(typeof(Slider));
    sliderHolder.SetBinding(Slider.ValueProperty, new Binding("Score") { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
    sliderHolder.SetValue(Slider.MarginProperty, new Thickness(5));
    sliderHolder.SetValue(Slider.MaximumProperty, (double)100);
    sliderHolder.SetValue(Slider.MinimumProperty, (double)0);
    var dataTemplate = new DataTemplate();
    dataTemplate.VisualTree = sliderHolder;
    dataTemplate.DataType = typeof(DataGridTemplateColumn);
    pcColumn.CellTemplate = dataTemplate;
}
于 2013-03-19T17:18:31.353 に答える