我用WPF编写了一个自定义控件,我想这样做:
1.按百分比设置填充
2.自动将顶部/左侧/右侧/底部(填充)全部设置为顶部/左侧/右侧/底部(填充)中的最小值。
这是Generic.xaml
<Style TargetType="{x:Type local:SC}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:SC}">
<Grid Margin="{TemplateBinding Margin}" Background="{TemplateBinding Background}" >
<Grid Margin="{TemplateBinding Padding}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Bind something"></ColumnDefinition>
<ColumnDefinition Width="Bind something"></ColumnDefinition>
<ColumnDefinition Width="Bind something"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Bind something"></RowDefinition>
<RowDefinition Height="Bind something"></RowDefinition>
<RowDefinition Height="Bind something"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Column="1" Grid.Row="1">
<ContentPresenter Content="{TemplateBinding Content}"></ContentPresenter>
</Grid>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我的想法是使用3行3列,分别设置GridLength并将内容设置为Grid.Column="1"
&Grid.Row="1"
。
但是在编写一些代码之后,我发现必须使用multibinding&Converter ,重复计算GridLength多次即可。我认为结果是相同的,因此重复的计算是没有用的。而且,如果项目中有很多此控件,则会降低性能。
恐怕我还没有清楚地解释并造成一些误解。但我想学习如何实现这一目标。谢谢。
答案 0 :(得分:1)
在这种情况下,列或行中的star属性将使所有大小相等,这将导致2个小蜂蜂成为大小的一半。
您还可以使一行的大小是另一行的2倍,而给一行"*"
,第二行的行则以"2*"
开始。
在您的情况下,请替换为该
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{TemplateBinding ActualHeight,Converter={StaticResource GridLengthConverter}}"></ColumnDefinition>
<ColumnDefinition Width="{TemplateBinding ActualHeight,Converter={StaticResource GridLengthConverter}}"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="{TemplateBinding ActualHeight,Converter={StaticResource GridLengthConverter}}"></RowDefinition>
<RowDefinition Height="{TemplateBinding ActualHeight,Converter={StaticResource GridLengthConverter}}"></RowDefinition>
</Grid.RowDefinitions>
具有:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
编辑:
<Grid.RowDefinitions>
<RowDefinition Height="4*"></RowDefinition>
<!-- i will take 80 % of the space available-->
<RowDefinition Height="*"></RowDefinition>
<!-- i will take 20 % of the space available-->
</Grid.RowDefinitions>