Wpf将所有列设置为具有相同的默认宽度

时间:2014-11-12 13:36:44

标签: c# wpf mvvm

我试图在网格中列出很多项目,我不想重复" ColumnDefinition Width = 40"从这里到无穷大,因为我将需要添加更多带有绑定的TextBox。

有什么方法可以将所有列设置为宽度为40,以便我不必列出所有内容? 我尝试过使用UniformGrid,但我无法使其正常工作。

<ListView ItemsSource="{Binding TreeViewData}">
    <ListView.Resources>
        <DataTemplate
            DataType="{x:Type model:Character}">
            <Grid >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50"/>
                    <ColumnDefinition Width="40"/>
                    <ColumnDefinition Width="40"/>
                    <ColumnDefinition Width="40"/>
                    <ColumnDefinition Width="40"/>
                    <ColumnDefinition Width="40"/>
                </Grid.ColumnDefinitions>

                <TextBlock Text="{Binding Type}" />
                <TextBox Grid.Column="1" Text="{Binding MaxHealth}" />
                <TextBox Grid.Column="2" Text="{Binding Health}" />
                <TextBox Grid.Column="3" Text="{Binding RegenerationSpeed}" />
                <CheckBox Grid.Column="4" IsChecked="{Binding Invincible}" Margin="10,3,0,0"/>
            </Grid>
        </DataTemplate>
    </ListView.Resources>
</ListView>

1 个答案:

答案 0 :(得分:1)

它可能比它的价值更多,因为你不能直接将一个Style应用于网格的ColumnDefinitions。我可能只是用你的值(40)设置一个资源并使用它。如果您决定将值更改为50或其他值,则至少您只需要将值更改为一个位置。您可以在XAML(在您的ResourceDictionary中,如果您有几个控件等或Window.Resources,无论如何)中这样做:

<Window.Resources>
    <GridLength x:Key="stdWidth">40</stdWidth>
</Window.Resources>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{StaticResource stdWidth}" />
    </Grid.ColumnDefinitions>
</Grid>