我遇到了一个奇怪的问题......
看起来使用GridSplitter调整Grid列的大小会禁用(或以其他方式停用)Grid列上定义的触发器.
这是我的设置:
Grid有3列,定义如下:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="Auto"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="4*"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)
期望的是,当第三列中没有构成用于控件的ItemsSource的项时,将为第二列和第三列分配0宽度(分别托管GridSplitter和辅助项控件).
只要我不接触Splitter(当辅助控件中的所有选项卡都关闭时,只有第一列仍然可见),这种方法效果很好.
如果我移动分离器,问题就会开始,从而有效地改变列## 0和2之间的比例.在这种情况下,当右侧控制中的所有项目都关闭时,这些列的宽度不会被重置.
我怀疑这与GridSplitter"覆盖"我在XAML中的定义有关.
有人可以确认/反驳这一理论,并建议如何解决这个问题?
我的设置如下所述:
问题是,当我按下键盘上的Enter键时,我在最后一个输入字段中提供的值不会被推送到ViewModel的底层属性.
我怀疑这与在窗口关闭之前输入字段没有丢失焦点这一事实有关(因此所有绑定都"解散").为了进行比较,如果我单击 "保存"按钮(而不是让Enter上的窗口处理其Click),则会在属性中更新该值.此外,如果我为按钮的Click事件添加(恐怖!恐怖!)事件处理程序,并在代码隐藏中调用button.Focus(),一切正常!
什么可以补救?
我显然不想处理任何窗口关闭事件,并"手动"获取缺少值...这将违反整个MVVM概念:-(
有更好的建议吗?
谢谢,Alex
我敢肯定我正在努力学习一些非常基本的东西,错过了一个非常简单的观点...但我只是一直打墙,所以请帮忙.
问题如下.
如果我<Window.Resources>在同一个窗口中定义某个样式,我将其应用于控件 - 一切正常.但是因为我想在我的应用程序的不同窗口中重用这个样式,所以我试图将样式移到一个常见的位置......而且这里的东西停止了工作.
如果我将样式放在Themes\Generic.xaml中,则样式不会被应用.
当我尝试通过显式应用Style="{DynamicResource MyStyle}"相应的控件(其中"MyStyle"是样式的x:Key)从原始窗口引用它时- 我收到错误
无法解析资源"MyStyle"
如果我将该样式放在一个单独的XAML文件中,并尝试将其添加到App.xaml中的MergedDictionaries中,我会遇到另一个问题:"'Resources'属性已经在'App'上设置了".这是我尝试定义它的方式:
<Application.Resources>
<ResourceDictionary x:Key="MergedDictionaries">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/MyStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<Application.Resources>
Run Code Online (Sandbox Code Playgroud)