我试图坚持窗口的位置,我有以下XAML(删除了非相关部分)
<Window x:Class="App.MainWindow"
Title="MainWindow" Name="mainWindow"
Top="{Binding Source={StaticResource Settings}, Path=Default.PositionY}"
Left="{Binding Source={StaticResource Settings}, Path=Default.PositionX}"
AllowsTransparency="True" WindowStyle="None" SizeToContent="WidthAndHeight"
Background="#01000000" Topmost="{Binding Source={StaticResource Settings}, Path=Default.AlwaysOnTop}"
MouseLeftButtonDown="mainWindow_MouseLeftButtonDown"
“设置”在App.xaml中定义并映射到应用设置
Google上的搜索使用我使用的方法提供了几个这样的例子。
TopMost的绑定完全按预期工作,此值在运行之间保持不变 然而,Top和Left的绑定似乎只能单向工作。窗口从设置中正确选取其位置,但移动时,设置不会更新。 我的Settings.Save函数上的断点显示Top和Left属性已按预期更改。在保存之前手动将这些值复制到设置中可以正常工作。 我已经尝试明确指定Mode = TwoWay无效(无论如何应该默认)
PositionX和PositionY都是用户设置,定义为double类型
使用以下鼠标处理程序
完成移动窗口private void mainWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs args)
{
DragMove();
}
为什么双向绑定只能以一种方式运作?
答案 0 :(得分:2)
嗯,如果没有明确设置TwoWay,它确实无效。我刚试过这个:
Top="{Binding Source={StaticResource Settings}, Path=Default.PositionY, Mode=TwoWay}"
Left="{Binding Source={StaticResource Settings}, Path=Default.PositionX, Mode=TwoWay}"
这就是工作。
关于INotifyPropertyChanged:这不是必需的,因为它是另一个绑定方向,即在启动时工作一次的方向。而且在生成的类中实现起来可能很困难。
答案 1 :(得分:1)
ColinE所说的内容:让您正确实现INotofiyPropertyChanged
界面。如果您与我们分享您的设置类的代码,将会有所帮助。
但也请确保您指定了绑定模式Mode=TwoWay
,这不是您在问题中建议的默认设置。
答案 2 :(得分:0)
为了更新绑定,公开PositionY
和PositionX
属性的对象需要实现INotifyPropertyChanged
接口,并在这两个接口时引发PropertyChanged
事件属性改变。你没有展示这段代码,但我的猜测是你没有这样做。