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中的网格样式没有模板属性?的主要内容,如果未能解决你的问题,请参考以下文章