Uwp 如何在通用平台中绑定Grid ColumnDefinition.Width?
对不起,我没有找到答案Uwp 如何在通用平台中绑定Grid ColumnDefinition.Width?,uwp,uwp-xaml,Uwp,Uwp Xaml,对不起,我没有找到答案 <Grid x:Name="MyGrid" Background="LightGray" > <Grid.ColumnDefinitions > <ColumnDefinition MaxWidth="30"/> <ColumnDefinition Width="{Binding Column1 , Mode=TwoWay}"/> <ColumnDefinition MaxWidth="30
<Grid x:Name="MyGrid" Background="LightGray" >
<Grid.ColumnDefinitions >
<ColumnDefinition MaxWidth="30"/>
<ColumnDefinition Width="{Binding Column1 , Mode=TwoWay}"/>
<ColumnDefinition MaxWidth="30"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<TextBox Text="0"/>
</Grid>
<Grid Grid.Column="1">
<TextBox Text="1"/>
</Grid>
<Grid Grid.Column="2">
<TextBox Text="2"/>
</Grid>
</Grid>
这个代码有什么问题?
顺便问一下,是否能够在xaml中离开Grid.ColumnDefinitions部分并直接为列设置ColumnDefinition属性(不要为代码隐藏中的每个属性设置变量)如果要在页面隐藏代码中绑定Column1
属性,请使用DataContext作为默认源,您应该指定此页面的数据上下文,因此只需在主页的构造函数中添加以下代码
public主页()
{
this.InitializeComponent();
//添加此代码以指定绑定的数据上下文
this.DataContext=this;
}
---更新---
通常,我们使用绑定来绑定数据模型的属性,如果您想通过更改代码隐藏中的一些参数来更改列/网格值,您可以实现接口并使属性订阅事件,下面是基于上述代码的简单代码示例
在xaml中,我添加了一个按钮来更改其click事件中的Column1
属性
下面是实现接口的代码
公共密封部分类主页面:第页,INotifyPropertyChanged
{
私有网格长度_column1=新网格长度(20);
公共事件属性更改事件处理程序属性更改;
私有void OnPropertyChanged(字符串PropertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(PropertyName));
}
}
公共网格长度列1
{
得到
{
返回第1列;
}
设置
{
_第1列=数值;
不动产变更(“第1列”);
}
}
公共主页()
{
this.InitializeComponent();
//添加此代码以指定绑定的数据上下文
this.DataContext=this;
}
双倍宽度=20;
私有无效按钮\u单击(对象发送者,路由目标e)
{
Column1=新网格长度(宽度+=10);
}
}
您必须实现INotifyPropertyChanged
。感谢您的回答,我实现了它,但它没有任何帮助。还有其他想法吗?我看到GridLength
的Value
属性是只读的(没有设置方法)。您可以定义类型为double的DependencyProperty
,并向其注册PropertyChangedCallback
,以更改特定列的宽度。非常感谢您的回答。绑定数据真的很酷(如果我理解正确的话),但也许我写得不够清楚,我想根据代码后面的一些参数来改变列/网格设计。再次感谢您的回答。@user1820916我已经更新了我的答案,您可以检查一下。如果您不熟悉数据绑定,并且想了解更多信息,我建议您查看文档并进行分析。噢,非常感谢!你完全正确,我是全新的。
public sealed partial class MainPage : Page
{
private GridLength _column1 = new GridLength(10);
public GridLength Column1
{
get
{
return _column1;
}
set
{
_column1 = value;
}
}
public MainPage()
{
this.InitializeComponent();
}
}