我的Xaml中有一个ContentControl,我想在ViewModel中访问它的高度,我尝试在ViewModel中创建一个属性,并通过TwoWay将其绑定到ContentControl。但问题是它将ContentControl高度设置为0,这是该属性的默认值。
代码:
的Xaml
<ContentControl x:Name="ContentControl"
Content="{Binding ContentFrame}"
HorizontalContentAlignment="Stretch"
Height="{Binding ContentControlHeight, Mode=TwoWay}"
VerticalContentAlignment="Stretch"></ContentControl>
ViewModel(使用Fody进行属性更改通知):
public double ContentControlHeight {get;组; }
答案 0 :(得分:2)
根据Romasz的建议,@ ZeaShah你可以创建一个自定义类并在其中注册SizeChanged事件。
((sum1) 5)
定义依赖项属性并将其绑定在主页面中:
public class MyContentControl : ContentControl
{
public MyContentControl()
{
this.SizeChanged += MyContentControl_SizeChanged;
}
private void MyContentControl_SizeChanged(object sender, Windows.UI.Xaml.SizeChangedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("SizeChanged: height " + e.NewSize.Height + " width: " + e.NewSize.Width);
CHeight = e.NewSize.Height;
}
public double CHeight
{
get { return (double)GetValue(CHeightProperty); }
set { SetValue(CHeightProperty, value); }
}
// Using a DependencyProperty as the backing store for CHeight. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CHeightProperty =
DependencyProperty.Register("CHeight", typeof(double), typeof(MyContentControl), new PropertyMetadata(0));
}
答案 1 :(得分:0)
绑定到ActualHeight(可能宽度)不是一个好选择,因为:
出于ElementName绑定的目的,ActualHeight 在更改时不会发布更新(由于其异步和运行时计算的性质)。不要尝试使用ActualHeight作为ElementName绑定的绑定源。如果您的方案需要基于ActualHeight的更新,请使用SizeChanged处理程序。
值得遵循上述内容并使用SizeChanged事件。