【问题标题】:How to get Width of a Grid on Property Changed in WPF如何在 WPF 中更改属性上获取网格的宽度
【发布时间】:2011-01-16 03:47:39
【问题描述】:

我想获得Grid 的实际Width(或Height)并将其显示在文本框中,但是当我调整我想要的窗口大小时,宽度/高度应该是“实时”的查看新尺寸。

我该怎么做?

更新:

关于Matt's answer

这很好,但现在我想更进一步。

我需要变量中的实际宽度用于测试目的,例如设置一些 if 语句或缩放网格中的其他对象。

我该怎么做?

【问题讨论】:

    标签: c# wpf grid width


    【解决方案1】:
    <Grid x:Name="myGrid">...</Grid>
    
    <TextBox Text="{Binding ActualWidth,ElementName=myGrid}" />
    

    TextBox 当然可以在Grid 内。)

    诀窍在于Width 只指定控件的初始宽度。 ActualWidth 是您应该绑定到的“实时”属性。

    【讨论】:

    • 实际上,Actual* 属性位于层次结构的较高位置,因此可用于除网格之外的许多其他控件。
    • nice :D thx...知道如何在代码隐藏中实现这个“唯一”吗?例如,如果我创建一个网格 mygrid = new grid() 和 tb TextBox mytb = new TextBox() 如何在那里分配它? .. mytb.Text=mygrid.actualwidth; ?或属性改变或类似的东西?
    • 代码中的相同内容:mytb.SetBinding(TextProperty, new Binding("ActualWidth") { Source=mygrid });
    • @John 我认为应该是 { ElementName = "myGrid" },不是吗?还是 Source 也可以?
    • @Matt - 不,只有当您在 XAML 中定义了一个名为“myGrid”的元素时,它才会在您添加 TextBox 的同一范围内起作用。变量名称不会从代码转移到 XAML。 ElementName 实际上只是设置 Source 的快捷方式,用于解决无法将元素绑定到 XAML 中的绑定属性的事实(这是 Silverlight 3.0 之前的问题)。它们具有相同的效果,但使用不同类型的引用。
    【解决方案2】:

    回答你的第二组问题:

    您可以将DependencyProperty 添加到Window 并将其绑定到GridActualHeight,方法与绑定TextBoxText 属性相同。

    还可以将其他控件的其他属性绑定到GridActualHeight。如果您需要在两者之间进行计算,请使用 ValueConverter 将值更改为您需要的值。

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 2017-01-30
      相关资源
      最近更新 更多