Tag: wpf

何时使用WPF绑定path?

我已经看到了很多WPF绑定的例子,并且在学习MVVM的许多不同的地方使用了这个特性,但是对于我来说似乎很不一致的是当你在绑定string中指定“Path =”作为简单的键入要绑定的属性。 例如,以下XAML属性之间的function区别是什么: DataMemberBinding="{Binding SomeProperty}" DataMemberBinding="{Binding Path=SomeProperty}"

确保在MVVM WPF应用程序中的UI线程上调用OnPropertyChanged()

在我正在使用MVVM模式编写的WPF应用程序中,我有一个后台进程来完成这件事,但是需要从UI中获取状态更新。 我正在使用MVVM模式,所以我的ViewModel几乎不知道向用户展示模型的视图(UI)。 说我有我的ViewModel中的以下方法: public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e) { this.Messages.Add(e.Message); OnPropertyChanged("Messages"); } 在我看来,我有一个ListBox绑定到ViewModel的Messages属性( List<string> )。 OnPropertyChanged通过调用PropertyChangedEventHandler来实现INotifyPropertyChanged接口的angular色。 我需要确保在UI线程上调用OnPropertyChanged – 我该怎么做? 我已经尝试了以下内容: public Dispatcher Dispatcher { get; set; } public MyViewModel() { this.Dispatcher = Dispatcher.CurrentDispatcher; } 然后将以下内容添加到OnPropertyChanged方法: if (this.Dispatcher != Dispatcher.CurrentDispatcher) { this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate { OnPropertyChanged(propertyName); })); return; } 但是这不起作用。 有任何想法吗?

部分声明不能指定不同的基类

我是WPF的新手。 我有一个名为StandardsDefault的wpf页面。 在后面的代码中, StandardsDefault像所有其他页面一样inheritance了Page 。 <Page x:Class="namespace.StandardsDefault" public partial class StandardsDefault : Page 现在我创build了一个inheritanceStandardsDefault而不是页面的新类CountryStandards 。 <Page x:Class="namespace.CountryStandards" public partial class CountryStandards : StandardsDefault 我没有改变XAML。 我得到的错误 “ 'CountryStandards' “的部分声明不能指定不同的基类” 我认为问题可能是devise师不是inheritance同一个class级。 但我需要以某种方式实现inheritance,因为有许多常用的方法将被用在许多标准页面,如CountryStandards 谁能帮我吗?

声明文本装饰,如下划线,样式中的删除线

如何在样式定义中包含下划线,删除线等文字装饰: <Style x:Key="UnderlinedLabel"> <Setter Property="Control.FontFamily" Value="Trebuchet MS" /> <Setter Property="Control.FontSize" Value="14" /> <!– Next line fails –> <Setter Property="Control.TextDecorations" Value="Underline" /> </Style> 我熟悉使用下面的XAML来强调文本: <TextBlock> <Underline> Underlined text </Underline> </TextBlock> 然而,文本装饰只是另一种风格,我希望能够像FontWeight,FontSize等那样声明性地定义它。 [更新] 我将这种风格应用于Label控件。 这是我的主要问题。 看起来你不能在标签中加下文字。 更改为一个TextBlock(谢谢gix),一切都很好。

保存之前的WPF数据绑定

在我的WPF应用程序中,我有一些数据绑定文本框。 这些绑定的UpdateSourceTrigger是LostFocus 。 该对象使用“文件”菜单进行保存。 我遇到的问题是,可以在文本框中input一个新的值,从文件菜单中select保存,并且永远不会保留新值(在文本框中可见的值),因为访问菜单不会从文本框中移除焦点。 我怎样才能解决这个问题? 有没有办法强制一个页面中的所有控件进行数据绑定? @palehorse:好点。 不幸的是,我需要使用LostFocus作为我的UpdateSourceTrigger,以支持我想要的validationtypes。 @dmo:我已经想到了。 然而,对于一个相对简单的问题来说,它似乎是一个非常不合理的解决scheme。 另外,它要求在页面上有一些控件总是可见的以获得焦点。 我的应用程序是选项卡,但是,所以没有这样的控制很容易出现。 @Nidonocu:使用菜单没有移动焦点从TextBox混淆了我的事实。 然而,这是我所看到的行为。 以下简单的例子演示了我的问题: <Window x:Class="WpfApplication2.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Window.Resources> <ObjectDataProvider x:Key="MyItemProvider" /> </Window.Resources> <DockPanel LastChildFill="True"> <Menu DockPanel.Dock="Top"> <MenuItem Header="File"> <MenuItem Header="Save" Click="MenuItem_Click" /> </MenuItem> </Menu> <StackPanel DataContext="{Binding Source={StaticResource MyItemProvider}}"> <Label Content="Enter some text and then File > Save:" /> <TextBox […]

DependencyProperty.Register()或.RegisterAttached()

两者之间有什么区别,应该使用RegisterAttached()而不是.Register()?

WPF DataBinding:可空的Int仍然得到validation错误?

我有一个文本框的数据绑定到一个可空的int通过代码。 如果我从文本框中删除数据,它会给我一个validation错误(红色边框)。 这是我的绑定代码: ZipBinding = new Binding("Zip"); ZipBinding.Source = Address; zipTextBox.SetBinding(TextBox.TextProperty, ZipBinding); public Int32? Zip { get { … } set { … } } 它清楚地标记为Nullable所以为什么WPF想给我一个validation问题,当我清除文本框?

触发器和DataTrigger有什么区别?

他们似乎是一样的。 有什么重大的区别? 我想我错过了一些东西。

在XAML风格中,如何将纯色背景更改为渐变?

我有一个MainResources.xaml文件,其中我有一个样式,它定义了我的应用程序中每个窗口的外观: <Style x:Key="MainBorderStyle" TargetType="{x:Type Border}"> <Setter Property="Background" Value="WhiteSmoke" /> <Setter Property="BorderBrush" Value="LightGray" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="CornerRadius" Value="5" /> <Setter Property="SnapsToDevicePixels" Value="True" /> </Style> 而不是“WhiteSmoke”,我希望我的背景是这个渐变: <LinearGradientBrush> <GradientStop Color="#ccc" Offset="0"/> <GradientStop Color="#bbb" Offset="1"/> </LinearGradientBrush> 但下面的尝试会导致VS2008告诉我“样式设置器不支持子元素”: <Style x:Key="MainBorderStyle" TargetType="{x:Type Border}"> <Setter Property="Background"> <LinearGradientBrush> <GradientStop Color="#ccc" Offset="0"/> <GradientStop Color="#bbb" Offset="1"/> </LinearGradientBrush> </Setter> <Setter Property="BorderBrush" Value="LightGray" /> […]

WPF IOException找不到资源

我有一个WPF应用程序。 应用程序在MainWindow.xaml中运行时打开的页面,如App.xaml文件的StartupUri属性中设置的那样。 此页面打开罚款。 但是,如果我尝试使用Show或ShowDialog方法打开任何其他窗口,则会在InitializeComponent方法中出现“无法find资源”Window1.xaml(或任何文件被调用)的IOException。 这发生在我创build的每个窗口。 我在网上search,但所有的解决scheme似乎都说“确保App.xaml的StartupUri属性是正确的”,我的是,因此MainWindow开放。 任何想法发生了什么?