[编辑]:我想出了如何自己做这个。 我发布了我的解决scheme,希望能在几天的Googlesearch中省掉其他人。 如果你是一个WPF大师,请看看我的解决scheme,让我知道如果有一个更好/更优雅/更有效的方式来做到这一点。 特别是,我有兴趣知道我不知道什么…这个解决scheme将如何把我拧在路上? 这个问题真的归结为暴露内部控制属性。 问题:我正在创build一些代码来为WPF中的XML文件自动生成一个数据绑定的GUI。 我有一个xsd文件,可以帮助我确定节点types等。简单的键/值元素很容易。 当我parsing这个元素时: <Key>value</Key> 我可以创build一个新的“KeyValueControl”并将DataContext设置为此元素。 KeyValue被定义为一个UserControl,并且只有一些简单的绑定。 它适用于任何简单的XElement。 这个控件中的XAML如下所示: <Label Content={Binding Path=Name} /> <TextBox Text={Binding Path=Value} /> 结果是一行有一个带有元素名称的标签和一个可以编辑的值的文本框。 现在,有时我需要显示查找值而不是实际的值。 我想创build一个类似于上述KeyValueControl的“KeyValueComboBox”,但是能够指定(根据文件中的信息)ItemsSource,Display和Valuepath。 “名称”和“值”绑定将与KeyValueControl相同。 我不知道如果一个标准的用户控件可以处理这个,或者如果我需要从select器inheritance。 控件中的XAML看起来像这样: <Label Content={Binding Path=Name} /> <ComboBox SelectedValue={Binding Path=Value} ItemsSource={Binding [BOUND TO THE ItemsSource PROPERTY OF THIS CUSTOM CONTROL] DisplayMemberPath={Binding [BOUND TO THE DisplayMemberPath OF THIS CUSTOM CONTROL] SelectedValuePath={Binding [BOUND […]
我从.NET 1.1开始就一直使用Winforms,我想开始学习WPF。 我正在为WPF初学者寻找一些好的资源。 我应该阅读什么,我需要什么工具,以及我应该遵循的最佳实践是什么?
我有这个class级: public partial class Window1 : Window { public String Name2; public Window1() { InitializeComponent(); Name2 = new String('a', 5); myGrid.DataContext = this; } // … } 我想在文本框中显示stringName2 。 <Grid Name="myGrid" Height="437.274"> <TextBox Text="{Binding Path=Name2}"/> </Grid> 但是string不显示。 另外,如果使用TimerCallback定期更新stringName2 ,那么在数据更改时是否需要执行任何操作以确保文本框已更新?
在我的XAML文件中,我想显示包含双引号和 单引号的文本: 你不应该select“如果新的复制”。 这些工作都不是: <TextBlock Text="You shouldn't choose "Copy if New":"/> <TextBlock Text="You shouldn't choose ""Copy if New"":"/> <TextBlock Text="You shouldn't choose \"Copy if New\":"/> <TextBlock Text='You shouldn't choose \"Copy if New\":'/> <TextBlock Text='You shouldn\'t choose \"Copy if New\":'/> 我放弃了,我可以在XAML中做这个吗?
我试图保持一个Window周围的实例,并在需要时调用ShowDialog 。 这工作发现在winforms中,但在WPF我收到这种怀疑: System.InvalidOperationException:无法设置可视性,或在窗口closures后调用Show,ShowDialog或WindowInteropHelper.EnsureHandle。 有没有办法在WPF中做这样的事情? MyWindow.Instance.ShowDialog(); public class MyWindow : Window { private static MyWindow _instance; public static MyWindow Instance { if( _instance == null ) { _instance = new Window(); } return _instance(); } }
我有一个使用GalaSoft MVVM Light框架传递参数到relaycommand的问题。 我知道mvvm light的relaycommand实现不使用lambda参数,所以我做了一些研究,并find了一种方法,人们通过这样做来解决这个问题: public RelayCommand ProjMenuItem_Edit { get { if (_projmenuItem_Edit == null) { //This should work…. _projmenuItem_Edit = new RelayCommand(ProjEditNode); } return _projmenuItem_Edit; } } private void ProjEditNode(object newText) { var str = newText as string; OrganLocationViewModel sel = ProjectOrganLocationView.GetExtendedTreeView().GetTopNode(); //Console.WriteLine(sel.OrganDisplayName); sel.OrganDisplayName = str; } 但是,我不断收到一个错误_projmenuItem_Edit = new RelayCommand(ProjEditNode); 说Argument 1: cannot […]
我将图像的Source属性绑定到一个string。 这个string可能是null,在这种情况下,我只是不想显示一个图像。 但是,我在我的debugging输出中得到以下内容: System.Windows.Data错误:23:无法将types'<null>'中的'<null>'转换为具有默认转换的'en-AU'文化types'System.Windows.Media.ImageSource'; 考虑使用Binding的Converter属性。 NotSupportedException:'System.NotSupportedException:ImageSourceConverter不能从(null)转换。 System.ComponentModel.TypeConverter.GetConvertFromException(Object value)at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o,Type destinationType,DependencyObject)上System.Windows.Media.ImageSourceConverter.ConvertFrom(ITypeDescriptorContext上下文,CultureInfo文化,对象值) targetElement,CultureInfo culture,布尔isForward)' 我宁愿如果这不显示,因为它只是噪音 – 有没有办法压制它?
我有一个网格如下, <Grid> <Grid.RowDefinitions> <RowDefinition Height="0.5*" /> <RowDefinition Height="0.5*" /> </Grid.RowDefinitions> </Grid> 我如何在代码中给出Height = "0.5*" ?
我一直在看WPF,但我从来没有真正的工作(除了15分钟,这引发了这个问题)。 我看了这篇文章,但它真的是关于WPF的“Flash”。 那么Windows窗体应用程序和WPF应用程序有什么区别?
我可以在代码中单独设置边距,但是如何在XAML中执行此操作,例如,如何执行此操作: 伪代码: <StackPanel Margin.Top="{Binding TopMargin}">