【问题标题】:Binding window location not working two way绑定窗口位置不起作用两种方式
【发布时间】:2012-01-27 09:26:56
【问题描述】:

我正在尝试保留窗口的位置,我有以下 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();
}

任何想法为什么两种方式绑定只能以一种方式工作?

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    好吧,如果不明确设置 TwoWay,它真的不起作用。我刚试过这个:

    Top="{Binding Source={StaticResource Settings}, Path=Default.PositionY, Mode=TwoWay}" 
    Left="{Binding Source={StaticResource Settings}, Path=Default.PositionX, Mode=TwoWay}" 
    

    这样就可以了。

    关于 INotifyPropertyChanged:这不是必需的,因为它是另一个绑定方向,即在启动时工作一次的方向。而且可能很难在生成的类中实现。

    【讨论】:

    • 噢! - “TopMost”绑定似乎可以双向工作,但现在我怀疑我有其他代码让它看起来像它工作。添加 TwoWay 并没有第一次解决它,但同样,那个讨厌的“其他代码”可能已经让它变得高贵了
    【解决方案2】:

    ColinE 说的:让你正确实现INotofiyPropertyChanged 接口。如果您能与我们分享您的设置类的代码,将会有所帮助。

    但还要确保您指定绑定模式Mode=TwoWay,这不是您在问题中建议的默认设置。

    【讨论】:

    • 我正在使用一个 VS 生成的设置类,它确实实现了 INotifyPropertyChanged
    【解决方案3】:

    为了更新绑定,暴露PositionYPositionX 属性的对象需要实现INotifyPropertyChanged 接口并在这两个属性更改时引发PropertyChanged 事件。你还没有展示这部分代码,但我猜你没有这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 2020-04-07
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多