绑定列定义宽度
本文关键字:定义 绑定 | 更新日期: 2023-09-27 18:21:14
我正在使用https://slideview.codeplex.com在Visual Studio 2015的帮助下,在Windows 10中。
我在设计中添加了一行两列的网格。在第一页中有大的图像,没有文本,在其他页面中有图标和文本。所以我把4*放在第一页的第一列,2*放在第二页的第一栏,这一切都很好,但我想让它在ContentPresenter中动态,然后我可以从C#分配它。
请有人帮帮我。
我尝试了不同的方式,就像我把下面的代码放在SlideApplicationFrame.cs 中一样
#region FirstColumnWidth (DependencyProperty)
/// <summary>
/// header Image First Column Width
/// </summary>
public GridLength FirstColumnWidth
{
get { return (GridLength)GetValue(FirstColumnWidthProperty); }
set { SetValue(FirstColumnWidthProperty, value); }
}
public static readonly DependencyProperty FirstColumnWidthProperty =
DependencyProperty.Register("FirstColumnWidth", typeof(GridLength), typeof(SlideApplicationFrame),
new PropertyMetadata(new GridLength(4, GridUnitType.Star)));
#endregion
#region ContentFirstColumnWidth (Attached DependencyProperty)
public static readonly DependencyProperty ContentFirstColumnWidth =
DependencyProperty.RegisterAttached("ContentFirstColumnWidth", typeof(GridLength), typeof(SlideApplicationFrame), new PropertyMetadata(new GridLength(4, GridUnitType.Star)));
public static void SetContentFirstColumnWidth(DependencyObject o, GridLength value)
{
o.SetValue(ContentFirstColumnWidth, value);
}
public static GridLength GetContentFirstColumnWidth(DependencyObject o)
{
return (GridLength)o.GetValue(ContentFirstColumnWidth);
}
#endregion
然后我在我的ContentPresenter中使用它,就像这个
<ContentPresenter library:SlideApplicationFrame.ContentFirstColumnWidth="{TemplateBinding FirstColumnWidth}" Grid.Column="1"/>
最后在样式设置器中
<ColumnDefinition Width="{Binding library:SlideApplicationFrame.ContentFirstColumnWidth}"/>
整体风格设置如下
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<Grid x:Name="GridHeader">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding library:SlideApplicationFrame.ContentFirstColumnWidth}"/>
<ColumnDefinition Width="5*"/>
</Grid.ColumnDefinitions>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
和从MainPage.xaml.cs 进行设置
SlideApplicationFrame RootFrame = Window.Current.Content as SlideApplicationFrame;
RootFrame.FirstColumnWidth = new GridLength(4, GridUnitType.Star);
请帮助我,我将非常感谢
首先,您必须记住ColumnDefinition Width
和RowDefinition Height
的值不是类型Double
,而是类型GridLength
在那之后,我可以想到两种情况:
-
绑定到另一个元素的值
-
绑定到ViewModel的值或后面的代码
情况1:
如果您绑定到double
的某个值,则还需要使用转换器将该值转换为GridLength
情况2:
如果绑定到代码中的某个内容,则可以创建类型为GridLength
的属性并直接绑定,或者如果值为double
,则可以像前面的用例一样再次使用Converter。
关于类型的一些参考
网格长度结构
GridUnitType枚举
- 自动-大小由内容对象的大小属性决定
- 像素-该值以像素表示
- 星形-该值表示为可用空间的加权比例
编辑-只是一个简单的绑定示例
仍然没有找到时间重新创建您的确切情况,所以我只使用了GridView
(因为它还有标题)-内容是紫色的,标题由两个网格列组成-绿色和红色,绿色绑定到主页中定义的依赖属性
XAML
<Page
...
x:Name="root">
<Page.Resources>
<Style TargetType="GridView" >
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<Grid x:Name="GridHeader" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="{Binding ElementName=root, Path=TestGridLength}"/>
</Grid.ColumnDefinitions>
<Grid Background="Red" Grid.Column="0"></Grid>
<Grid Background="Green" Grid.Column="1"></Grid>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<GridView Background="Purple">
</GridView>
</Page>
代码隐藏
public GridLength TestGridLength
{
get { return (GridLength)GetValue(TestGridLengthProperty); }
set { SetValue(TestGridLengthProperty, value); }
}
public static readonly DependencyProperty TestGridLengthProperty =
DependencyProperty.Register(
"TestGridLength",
typeof(GridLength),
typeof(MainPage),
new PropertyMetadata(null));
public MainPage()
{
this.InitializeComponent();
this.TestGridLength = new GridLength(10, GridUnitType.Star);
}