gpt4 book ai didi

c# - WPF 绑定(bind)控件在运行时的宽度

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:41 24 4
gpt4 key购买 nike

WPF 绑定(bind)控件宽度,因此它们始终具有相同的宽度

我想将 Window 的宽度绑定(bind)到另一个窗口上控件的 ActualWidth。

到目前为止,它只在显示窗口时更新一次宽度,但不会随着源代码管理更改宽度而更新。

带有 DockPanel 控件的窗口 1,它具有我希望绑定(bind)到的 ActualWidth(实际上有多个控件,但为了简单起见,我在这里只放了一个 DockPanel):

<Window x:Class="Testing1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Testing1"
mc:Ignorable="d"
Title="WindowWithControl" Height="350" Width="525" Initialized="Window_Initialized" Loaded="Window_Loaded" Closed="Window_Closed">

<Grid Name="gridMain">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<DockPanel Name="dockBindSource" Grid.Row="0" >
</DockPanel>
</Grid>
</Window>

窗口 2 - 这是我要匹配上一个窗口中控件宽度的窗口。

<Window x:Class="Testing1.ProgressOverlay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Testing1"
mc:Ignorable="d"
Title="ProgressOverlay" Height="300" Width="300" ShowInTaskbar="False" Opacity="0.75" AllowsTransparency="True" WindowStyle="None">
<Canvas Name="canvasPB" />
</Window>

cs 中的代码用于测试此处绑定(bind)的宽度。我需要在运行时执行此操作,因为在设计时我不知道窗口将链接到哪个控件。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
ProgressOverlay po = new ProgressOverlay();
po.Owner = this;
Binding b1 = new Binding();
b1.Mode = BindingMode.OneWay;
b1.Source = this.dockBindSource.ActualWidth;
po.SetBinding(FrameworkElement.WidthProperty, b1);
po.Show();
}

我所读到的关于实现绑定(bind)的所有内容都是 INotifyPropertyChanged 的​​要求。我以前在自定义类上使用过它,但不确定如何在现有控件类上使用。
我想我需要在 XML 的这一部分引发某种属性更改事件:<Canvas Name="canvasPB" />
否则,我会放弃绑定(bind),只向 Canvas 添加一个 SizeChanged 事件,但可能会有更简洁的方法。

最佳答案

我不知道为什么,但似乎 Window.Width 上的绑定(bind)不起作用。建议的解决方法:将窗口设置为 SizeToContent="Width" 并将宽度绑定(bind)到窗口内容 (canvasPB)

Binding b1 = new Binding("ActualWidth");
b1.Mode = BindingMode.OneWay;
b1.Source = this.dockBindSource;
po.canvasPB.SetBinding(FrameworkElement.WidthProperty, b1);

关于c# - WPF 绑定(bind)控件在运行时的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45951720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com