Tag: wpf

MVVM:绑定到ListBox.SelectedItem?

如何将视图模型属性绑定到ListBox.SelectedItem属性? 我已经创build了一个简单的MVVM演示,试图找出这一个。 我的视图模型有这些属性: private ObservableCollection<DisneyCharacter> p_DisneyCharacters; public ObservableCollection<DisneyCharacter> DisneyCharacters { get { return p_DisneyCharacters; } set { p_DisneyCharacters = value; base.FirePropertyChangedEvent("DisneyCharacters"); } } private DisneyCharacter p_SelectedItem; public DisneyCharacter SelectedItem { get { return p_SelectedItem; } set { p_SelectedItem = value; base.FirePropertyChangedEvent("SelectedItem"); } } 我想将SelectedItem属性绑定到列表框中选定的项目。 这是列表框的XAML: <ListBox ItemTemplate="{StaticResource MasterTemplate}" ItemsSource="{Binding Path=DisneyCharacters}" SelectedItem="{Binding Path=Selectedtem, Mode=TwoWay}" HorizontalAlignment="Stretch" /> […]

x:Reference和ElementName有什么区别?

根据MSDN上的x:Reference Markup Extension页面, x:Reference 引用在XAML标记中其他地方声明的实例。 引用是指元素的x:Name。 根据MSDN上的Binding.ElementName属性页面, ElementName 名称属性的值或x:感兴趣的元素的名称指令。 回头看第一页的备注部分: x:引用和WPF 在WPF和XAML 2006中,元素引用由ElementName绑定的框架级function来解决。 对于大多数WPF应用程序和场景,仍应使用ElementName绑定。 这个通用指南的例外情况可能包括数据上下文或其他范围的考虑使数据绑定不切实际以及不涉及标记编译的情况。 为了完整ElementName是ElementName页面上备注部分的一部分: 当你想绑定到应用程序中另一个元素的属性时,这个属性是很有用的。 例如,如果要使用滑块来控制应用程序中另一个控件的高度,或者如果要将控件的内容绑定到ListBox控件的SelectedValue属性。 现在,虽然我完全了​​解何时以及如何使用ElementName属性,但我并不完全了解它与x:Reference标记扩展之间的区别。 任何人都可以解释这一点,特别是扩展在x:Reference备注部分显示的最后一句话吗? 这个通用指南的例外情况可能包括数据上下文或其他范围的考虑使数据绑定不切实际以及不涉及标记编译的情况。

在WPF / Silverlight页面中设置自定义属性

这听起来应该是简单的。 我有一个正常的方式在XAML中声明的Page (即“添加新项目…”),它有一个自定义属性。 我想在与页面关联的XAML中设置该属性。 试图做同样的方式,我设置任何其他财产不起作用,原因我明白,但不知道如何工作。 就这样我们有一些具体的讨论,这里有一些(无效的)XAML。 我尽可能地减less了所有的东西 – 原来有一些属性,比如devise师的大小,但我相信这些与我正在做的事情无关。 <Page x:Class="WpfSandbox.TestPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MyProperty="MyPropertyValue"> </Page> 和相应的代码隐藏: using System.Windows.Controls; namespace WpfSandbox { public partial class TestPage : Page { public TestPage() { InitializeComponent(); } public string MyProperty { get; set; } } } 错误信息: 错误1 XML名称空间“ http://schemas.microsoft.com/winfx/2006/xaml/presentation ”中不存在属性“MyProperty”。 4号线位置7。 现在我知道为什么这是失败的:元素是types的Page和Page没有名为MyProperty属性。 这只是在TestPage声明的…它由x:Class属性指定,而不是由元素本身指定。 据我所知,这个configuration是XAML处理模型(即Visual Studio集成等)所必需的。 我怀疑我可以用一个依赖属性来处理这个,但是这有点像矫枉过正。 我也可以使用现有的属性(例如DataContext ),然后将值复制到代码后面的自定义属性中,但这会非常难看。 […]

主窗口的SynchronizationContext.Current如何在Windows窗体应用程序中变为空?

我的应用程序中有一个问题:在某些时候,主线程的SynchronizationContext.Current变为空。 我无法在孤立的项目中重现相同的问题。 我真正的项目是复杂的, 它混合了Windows窗体和WPF,并调用WCF Web服务。 据我所知,这些都是可以与SynchronizationContext进行交互的系统。 这是我孤立项目的代码。 我真正的应用程序做类似的东西。 但是,在我的真实应用程序中,在继续执行任务时,主线程上的SynchronizationContext.Current为null。 private void button2_Click(object sender, EventArgs e) { if (SynchronizationContext.Current == null) { Debug.Fail("SynchronizationContext.Current is null"); } Task.Factory.StartNew(() => { CallWCFWebServiceThatThrowsAnException(); }) .ContinueWith((t) => { //update the UI UpdateGUI(t.Exception); if (SynchronizationContext.Current == null) { Debug.Fail("SynchronizationContext.Current is null"); } }, CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.FromCurrentSynchronizationContext()); } 什么可能导致主线程的SynchronizationContext.Current变为空? 编辑: @Hans要求堆栈跟踪。 这里是: […]

我怎样才能在WPF的列表框中的所有项目相同的宽度列?

我有一个ListBox和一个ItemTemplate组成的一个TextBlock和一个ComboBox 。 问题是TextBlock内的文本的宽度是不相同的每个项目和ComboBox控件不alignment。 如何在模板中设置TextBlock ,使所有项目的宽度相同,即最宽的一个? 这是我的xaml: <ListBox MinHeight="100" ItemsSource="{Binding Trainees}"> <ListBox.ItemTemplate> <DataTemplate> <Grid Margin="1"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBlock VerticalAlignment="Center" Grid.Column="0"> <TextBlock.Text> <MultiBinding StringFormat="{}{0}, {1}"> <Binding Path="LastName" /> <Binding Path="FirstName" /> </MultiBinding> </TextBlock.Text> </TextBlock> <ComboBox HorizontalAlignment="Left" Grid.Column="1" ItemsSource="{Binding Source={StaticResource Functions}}" SelectedValue="{Binding Path=Function}" MinWidth="100" /> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

我应该什么时候使用装饰者?

WPF是伟大的,因为有很多方法来实现你的目标。 例如,据我所知,装饰者可以添加一些控件到UI元素,但是我认为通过包含附加元素的自定义控件也可以实现相同的行为。 所以,我的问题是:什么时候我应该更喜欢装饰者更复杂(但我认为更灵活)的自定义控件? 请考虑我广泛使用MVVM模式,我想绑定命令的附加元素。 特别是,我正在devise一个图表devise器应用程序,我想添加连接点到我的形状。 另一个我应该在自定义控件和装饰者之间做出决定的例子是显示一个自动定位以“跟随”该行的标签的行。 谢谢

alignmentWPF中堆栈面板左侧和右侧的控件

我有以下代码: <DockPanel> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal"> <RadioButton Content="_Programs" IsChecked="{Binding Path=ProgramBanksSelected}" IsEnabled="{Binding Path=ProgramsEnabled}" Margin="8" /> <StackPanel> <Label Content="Master" Height="28" Name="MasterFileStatus" VerticalContentAlignment="Center"/> </StackPanel> </StackPanel> … 单选button应该放在堆栈面板的左侧(我删除了一些button,不要混淆这个例子),标签(我暂时放在一个嵌套的StackPanel中)应该在右侧。 我已经尝试了很多路线的组合,但我无法在右侧获得标签。 我应该添加什么来完成这个?

禁用WPF中的button?

我在我的WPF应用程序中有一个button和一个文本框。 如何才能使button不启用,直到用户在文本框中input一些文本?

为什么依赖属性?

为什么微软去做依赖属性和依赖对象的路线,而不是使用reflection和可能的属性?

如何使WPF窗口在我的应用程序(而不是系统)的所有其他窗口之上?

我希望我的窗口只能在我的应用程序的所有其他窗口之上。 如果我设置窗口的TopMost属性,它将成为所有应用程序的所有窗口的顶部,我不想这样做。