c# - 初始化时未设置 WPF 依赖项属性
问题描述
我试图在 ViewModel 的初始化时设置 UserControl 的宽度,但它只收到零。当我调整窗口大小时,它会收到正确的宽度。
MainWindow.xaml 提取:
<local:MapControl x:Name="MapControl"
DataContext="{Binding MapViewModel}"
ActualControlWidth="{Binding ActualControlWidth, Mode=OneWayToSource}" />
MapControl.xaml.cs:
public partial class MapControl : UserControl
{
public MapControl()
{
InitializeComponent();
SizeChanged += OnControlSizeChanged;
}
public static readonly DependencyProperty ActualControlWidthProperty = DependencyProperty.Register(
"ActualControlWidth",
typeof(double),
typeof(MapControl),
new FrameworkPropertyMetadata(PropertyChangedCallback)); //here it does not have any influence if i put default(double) or not
private static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var newVar = e.NewValue;
}
public double ActualControlWidth
{
get { return (double)GetValue(ActualControlWidthProperty); }
set { SetValue(ActualControlWidthProperty, value); } //here comes the value as 785
}
private void OnControlSizeChanged(object sender, SizeChangedEventArgs e)
{
ActualControlWidth = ActualWidth;
}
}
MapViewModel.cs:
public class MapViewModel : ViewModelBase
{
private double _actualControlWidth;
private Map _map;
public MapViewModel()
{
...
}
public Map Map
{
get => _map;
set => Set(() => Map, ref _map, value);
}
public double ActualControlWidth
{
get => _actualControlWidth;
set => _actualControlWidth = value; //this is where the value comes as 0
}
}
谢谢你的帮助!
完整的复制示例在我的 Github https://github.com/czechdude/dependencypropertyissue
解决方案
推荐阅读
- sql - 在 Hive SQL 中合并多个表
- cucumber - 错误:“from”参数必须是字符串类型。收到未定义
- maven - 未在本地复制的依赖项(depclean 警告)
- wpf - 如何从选项卡控件中删除白色边框?
- python - 仅使用 FBProphet 进行逐年预测的问题
- docker - 使用 DockerFile 构建 Git 子树
- http-proxy - Sencha cmd 6.5 不接受代理设置
- file-locking - 如何使用flock创建文件锁并稍后解锁?
- cmd - 如何使用命令提示符运行共享驱动器上可用的 exe
- java - 我在 Netbeans IDE 上运行 JSP 和 Servlet 时遇到问题