WPF中的网格样式没有模板属性?

Posted

技术标签:

【中文标题】WPF中的网格样式没有模板属性?【英文标题】:no template property on grid style in WPF? 【发布时间】:2012-02-19 09:47:56 【问题描述】:

我想将Grid 的所有内容移动到样式/模板/容器(不知道该选择哪个...),但我试图将其移动到Style

但问题是我得到了错误:

“在类型上找不到样式属性‘模板’ 'System.Windows.Controls.Grid'"

我知道 Grid 没有 Template 属性,但我还能如何将网格内容移动到 ResourceDirectory 文件?

这是网格代码:

<Grid  Grid.Column="0"  Grid.Row="0" Margin="10,15,5,5" >
        
        <Border BorderThickness="7" CornerRadius="4">
            <Border.BorderBrush>
                <SolidColorBrush Color="#73B2F5" Opacity="0.5"/>
            </Border.BorderBrush>
            <Grid>
                <Grid.Background>
                    <SolidColorBrush Color="#73B2F5" Opacity="0.5"/>
                </Grid.Background>
                <Grid.RowDefinitions>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="1*"/>
                </Grid.RowDefinitions>
                <Button Name="CustomerButton" Grid.Row="1" Grid.Column="0" Width="40" Height="40" Content="Customer" Click="CustTabButton_Click" ></Button>
                <Button Name="BossButton" Grid.Row="1" Width="40" Height="40" Content="Boss" Margin="23,206,23,114" Click="BossTabButton_Click"></Button>
            </Grid>
        </Border>
        
    </Grid>

这是我将代码移到资源目录后的代码:

<Style x:Key="LeftSidePanel" TargetType="x:Type Grid">
    <Setter Property="Margin" Value="10,15,5,5" />
    <Setter Property="Template">
        <Setter.Value>
            <Border BorderThickness="7" CornerRadius="4">
                <Border.BorderBrush>
                    <SolidColorBrush Color="#73B2F5" Opacity="0.5"/>
                </Border.BorderBrush>
                <Grid>
                    <Grid.Background>
                        <SolidColorBrush Color="#73B2F5" Opacity="0.5"/>
                    </Grid.Background>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="30"/>
                        <RowDefinition Height="1*"/>
                    </Grid.RowDefinitions>
                    <Button Name="CustomerButton" Grid.Row="1" Grid.Column="0" Width="40" Height="40" Content="Customer" Click="CustTabButton_Click"></Button>
                    <Button Name="BossButton" Grid.Row="1" Width="40" Height="40" Content="Boss" Margin="23,206,23,114" Click="BossTabButton_Click"></Button>
                </Grid>
            </Border>
        </Setter.Value>
    </Setter>
</Style>

我错过了什么?

【问题讨论】:

【参考方案1】:

ContentControl 就是你要找的东西 -

<ContentControl Template="StaticReosurce MyTemplate">

像这样在资源字典中声明你的模板 -

<ControlTemplate>
   <Grid  Grid.Column="0"  Grid.Row="0" Margin="10,15,5,5" >
        <Border BorderThickness="7" CornerRadius="4">
            <Border.BorderBrush>
                <SolidColorBrush Color="#73B2F5" Opacity="0.5"/>
            </Border.BorderBrush>
            <Grid>
                <Grid.Background>
                    <SolidColorBrush Color="#73B2F5" Opacity="0.5"/>
                </Grid.Background>
                <Grid.RowDefinitions>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="1*"/>
                </Grid.RowDefinitions>
                <Button Name="CustomerButton" Grid.Row="1" Grid.Column="0" Width="40" Height="40" Content="Customer" Click="CustTabButton_Click" ></Button>
                <Button Name="BossButton" Grid.Row="1" Width="40" Height="40" Content="Boss" Margin="23,206,23,114" Click="BossTabButton_Click"></Button>
            </Grid>
        </Border>
    </Grid>

</ControlTemplate>

如果您不了解 ContentControl,请点击此链接 - https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.contentcontrol

【讨论】:

这很好,但是 Grid.Column 和 Grid.Row 在这里没有影响。它们应该驻留在内容控件上。

以上是关于WPF中的网格样式没有模板属性?的主要内容,如果未能解决你的问题,请参考以下文章

WPF Grid - 如何为一列应用样式?

自动更新 WPF 数据网格中的计算属性

如何在 WPF 中更改数据网格标题样式或元素样式前景

WPF 数据网格格式 - 并非所有样式都受到尊重

VS2010 去除WPF设计视图中的网格线

样式化 wpf 数据网格