小编Ale*_*lex的帖子

GridSplitter是否会覆盖ColumnDefinition的样式触发器?

我遇到了一个奇怪的问题......
看起来使用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中的定义有关.

有人可以确认/反驳这一理论,并建议如何解决这个问题?

wpf grid gridsplitter

11
推荐指数
2
解决办法
2525
查看次数

在具有默认按钮的对话框上按Enter键时,数据绑定不会更新属性

我的设置如下所述:

  • WPF 4申请
  • MVVM Lite框架
  • 在对话框模式下,主窗口顶部显示"添加项目"窗口(使用view.ShowDialog();)
  • 该对话框有许多输入字段,以及将其IsDefault属性设置为True的"保存"按钮
  • 使用绑定到Command来处理"保存"按钮
  • 数据绑定在视图的XAML中的输入字段和ViewModel中的相应属性之间定义(一种方式,UI用于更新ViewModel,Mode = OneWayToSource)

问题是,当我按下键盘上的Enter键时,我在最后一个输入字段中提供的值不会被推送到ViewModel的底层属性.

我怀疑这与在窗口关闭之前输入字段没有丢失焦点这一事实有关(因此所有绑定都"解散").为了进行比较,如果我单击 "保存"按钮(而不是让Enter上的窗口处理其Click),则会在属性中更新该值.此外,如果我为按钮的Click事件添加(恐怖!恐怖!)事件处理程序,并在代码隐藏中调用button.Focus(),一切正常!

什么可以补救?

我显然不想处理任何窗口关闭事件,并"手动"获取缺少值...这将违反整个MVVM概念:-(

有更好的建议吗?

谢谢,Alex

data-binding wpf mvvm

9
推荐指数
1
解决办法
3989
查看次数

应用样式时出现异常

我敢肯定我正在努力学习一些非常基本的东西,错过了一个非常简单的观点...但我只是一直打墙,所以请帮忙.

问题如下.

如果我<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)

.net wpf resources xaml styles

4
推荐指数
1
解决办法
1171
查看次数

标签 统计

wpf ×3

.net ×1

data-binding ×1

grid ×1

gridsplitter ×1

mvvm ×1

resources ×1

styles ×1

xaml ×1