我试图将这个xaml绑定转换为它的C#对应物有各种原因:
<ListView x:Name="eventListView" Grid.Column="0" Grid.Row="1" Background="LightGray" BorderThickness="0">
<local:EventCell x:Name="cell" Width="{Binding ActualWidth, Converter={StaticResource ListViewWidthConverter}, ElementName=eventListView, Mode=OneWay}"/>
</ListView>
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多有类似问题的问题,并想出了这段代码:
Binding b = new Binding();
b.Source = eventListView;
b.Path = new PropertyPath(cell.Width);
b.Converter = new ListViewWidthConverter();
b.Mode = BindingMode.OneWay;
cell.SetBinding(ListView.ActualWidthProperty, b);
Run Code Online (Sandbox Code Playgroud)
但是C#代码不能编译,我很遗憾为什么.
我最近在XAML中对我的配置设置进行了大量绑定.存储列宽/控制尺寸/窗口位置等.所以我想知道是否有一种简单的方法来创建并绑定到XAML的"设置/配置"值?
现在我只是在项目中创建一个设置,将一个可绑定的属性推送到XAML的DataContext中并从那里开始.但我的设置数量变得非常疯狂,管理它们变得很痛苦(无聊,重复和烦人).
在一个理想的世界里,我想要一个我可以做这样的事情的系统:
<Window State={Binding {Settings Name="MyWindowState", DefaultValue="Normal"}}/>
Run Code Online (Sandbox Code Playgroud)
如果"MyWindowState"设置不存在,它将自动创建并存储在某处.如果MyWindowState设置发生更改,则使用它的所有绑定也会相应地得到通知和更新.如果设置检索失败,将使用DefaultValue.
是否存在类似于此的东西,或者是否可以使用标准WPF XAML实现?
我正在计划开展一些可以做到这一点的事情,但是如果一个经过验证的解决方案已经存在,我很乐意至少看一下/听出来.
根据我的理解,Telerik的持久性框架可以做这样的事情,除了控制基础控制(没有全局"设置"我可以绑定),至少乍一看.
假设我的 Application.xaml 中有一些 ResourceDictionary 定义如下:
<Application>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="brushResources"/>
<ResourceDictionary x:Name="graphicsResources"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)
我本以为我可以简单地访问后面代码中的字典,如下所示:
brushResources.MergedDictionaries.Add(someNewBrushes)
graphicsResources.MergedDictionaries.Add(someNewGraphics)
Run Code Online (Sandbox Code Playgroud)
但事实似乎并非如此,这是处理 ResourceDictionary 的错误方法吗?我真的很喜欢使用 MEF 动态加载资源的能力,但这对我来说似乎是一个绊脚石。
编辑
修复了示例代码以显示字典实际上位于 MergedDictionaries 中
我刚刚注意到在尝试为新的iPad Retina显示屏更新我的应用程序时有趣的事情,Interface Builder中的每个坐标仍然基于原始的1024x768分辨率.
我的意思是,如果我有一个2048x1536的图像让它适合显示器上的整个屏幕,我需要将它的大小设置为1024x768而不是2048x1536.
我只是好奇这是故意的吗?我可以将Interface Builder中的坐标系切换为Retina特有的吗?这有点令人讨厌,因为我的一些图形在宽度或高度上都不是原始的2倍.我似乎无法设置1/2坐标数字,如1.5,它可以是Interface Builder内的1或2.
我现在应该只在代码中进行界面设计并忘记界面构建器吗?在两个方向上保持我的图形正好2倍?或者只是忍受它?