Tag: xaml

当DataContext发生更改时,WPF绑定OneWayToSource将source属性设置为“”

我有一个OneWayToSource绑定,当我设置目标控件的DataContext时,它的行为不像我预期的那样。 源的属性设置为默认值而不是目标控件属性的值。 我在标准WPF窗口中创建了一个非常简单的程序来说明我的问题: XAML MainWindow.cs public partial class MainWindow : Window { private ViewModel _vm = new ViewModel(); private void Button1_Click(object sender, RoutedEventArgs e) { Debug.Print(“‘Set DataContext’ button clicked”); tb.DataContext = _vm; } private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { Debug.Print(“TextBox changed to ” + tb.Text); } } ViewModel.cs public class ViewModel { private string […]

WPF-使按钮的下沉效果变慢

我在WPF中有一个按钮,当单击按钮时会创建一个凹陷效果。 我想知道是否有一个属性使效果显得更慢而不是默认速度? 这是我的代码: private void btnEnglish_PreviewMouseDown(object sender, MouseButtonEventArgs e) { btnEnglish.BorderThickness = new Thickness(10, 10, 0, 0); }

绑定ComboBox ItemsSource在WPF中不起作用

这有点奇怪,因为我在那里发现的每个例子都说我正在以正确的方式做事但我无法让我的ComboBox绑定在WPF中工作。 我刚刚创建了一个空的WPF应用程序。 public List myCollection { get; set; } public MainWindow() { DataContext = this; InitializeComponent(); myCollection = new List {“test1”, “test2”, “test3”, “test4”}; } 这是我的xaml: 我试过Binding myCollection,Binding Path = myCollection,我尝试过设置DataContext和不设置DataContext。 似乎没有什么工作。 我已经没有想法了,我发现的每个例子都说这是正确的方法,它应该工作,所以感谢任何帮助我推进。

如何在MVVM中管理多个窗口

我知道有几个类似于这个的问题,但是我还没有找到明确的答案。 我正试图深入了解MVVM,并保持尽可能纯净的东西,但不确定如何在坚持模式的同时启动/关闭窗口。 我最初的想法是使用ViewModel触发代码来启动新View的数据绑定命令,然后将View的DataContext通过XAML设置为它的ViewModel。 但这违反了我认为的纯MVVM …… 在一些谷歌搜索/阅读答案之后,我遇到了一个WindowManager的概念(就像在CaliburnMicro中一样),现在如果我要在一个vanilla MVVM项目中实现其中一个,那么我的ViewModel是否可以使用它? 或者只是我申请的核心? 我目前正在将我的项目分成Model程序集/项目, ViewModel程序集/项目和View程序集/项目。 这应该进入一个不同的“核心”组装吗? 这导致了我的下一个问题(与上述有关),如何从MVVM的角度启动我的应用程序? 最初我会从App.xaml启动我的MainView.xaml,而XAML中的DataContext将附加指定的ViewModel。 如果我添加一个WindowManager ,这是我的应用程序首先启动的吗? 我是否从App.xaml.cs的代码中执行此操作?

如何使用C#或XAML创建自动动画轮播图像?

我在Web开发中做了旋转木马,但是通过XAML或C#在WPF中制作动画对我来说是新的。 网上有一些例子,但它们要么已经过时,要么不是我想要的。 即使我玩其他项目的源代码,也不是我希望的。 我想让图像自动从左到右(水平)滑动。 用户无法与图像交互以停止滑动。 虽然我可以在ScrollViewer手动执行此操作,但该过程是手动的… ScrollViewer没有任何动画依赖项。 我尝试使用它来查看是否可能,但应用程序将始终崩溃。 我用的例子。 。 我尝试过的另一种尝试是将图像存储在StackPanel ,确保StackPanel是我的一个图像的宽度,然后将DispatcherTimer设置为为TranslateTransform的X属性设置动画。 但是……那没有去任何地方。 使用ScrollViewer或StackPanel并不重要。 我只是希望有类似旋转木马的效果自动转换图像。 有点像这个 我目前正在使用Visual Studio 2012和2013,如果有帮助的话。 有没有办法做到这一点?

Windows Phone 8.1应用程序多语言

我正在使用Visual Studio 2015在SilverLight中创建Windows phone app 8.1。我正在创建英语和阿拉伯语的多语言应用程序。 为此,我在项目中创建了Strings文件夹,其中包含en-US和ar-KW两个文件夹,每个文件夹中都包含Resources.resw文件。 我是x:Uid设置属性。 例如Key:- Actual.Text Value:- Actual 以上工作非常好。 我有combobox和项目EN和AR。 我正在触发SelectionChanged事件以更改语言但问题是当我停止应用程序并再次运行它时,它只会更改文本和布局。 如何在运行时不重新启动它。 private void LanguageComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e) { string selectedItem = (e.AddedItems[0] as ComboBoxItem).Content as string; var RootFrame = Window.Current.Content as SlideApplicationFrame; if (selectedItem == “EN”) ApplicationLanguages.PrimaryLanguageOverride = “en-US”; else if (selectedItem == “AR”) ApplicationLanguages.PrimaryLanguageOverride = “ar-KW”; RootFrame.Navigate(this.GetType()); }

扩展页面类

是否可以在C#的WPF工具包(或者其他任何WPF类)中扩展“Page”类? 我试图做的: public class ExtendedPage : Page{ protected void doStuff(){ // lots of joy n pleasure } } public partial class RandomWindow : ExtendedPage{ private void randomMethod(){ doStuff(); // causes error } } 我问的原因非常明显:在扩展Page-class(ExtendedPage)之后,子类(RandomWindow)无法访问其基类的方法。 这是(至少是我的猜测)由RandomWindow偏离的情况引起的。 由于这个类不幸是由WPF生成的(链接到相应的* .xaml),我无法找到部分类的其他部分。 这个问题可能导致一个非常明显的答案,让我看起来像一个完全白痴,但显然我无法弄明白。 我可能会补充一点,我刚刚开始使用C#,我的编程起源是Java。 确切的错误消息是“’type’的部分声明不能指定不同的基类”(CS0263)。 作为对其中一条评论的回应:* .xaml中的“Page”声明似乎生成了一个代码隐藏文件,其基类是“Page”(而不是ExtendedPage)。 改变这似乎也不起作用,编译器抱怨没有找到类型的ExtendedPage。 // to

如何将多个FlowDocumentReaders添加到StackPanel?

感谢Leom的回答,我可以通过将FlowDocument包装在FlowDocumentReader中来将其添加到StackPanel中。 但现在我有两个问题: 似乎只添加了第一个 FlowDocumentReader,其余的被忽略了 有一个我不能摆脱的不必要的边际 如何在没有不需要的边距的情况下将多个FlowDocumentReaders添加到StackPanel? 替代文字http://www.deviantsart.com/upload/1ndiqqe.png XAML: 代码背后: using System.Windows; using System.Windows.Controls; using System.Windows.Documents; namespace TestFlowdoc23432 { public partial class Window1 : Window { public Window1() { InitializeComponent(); StackPanel sp = new StackPanel(); TextBlock tb1 = new TextBlock(); tb1.Text = “first text block”; sp.Children.Add(tb1); TextBlock tb2 = new TextBlock(); tb2.Text = “second text block”; […]

WPF应用程序是否需要使用XAML?

我想学习C#,似乎每个人都在使用WinForms切换到使用WPF。 由于使用了用于构建Forms的.XAML文件,WPF应用程序对我来说似乎更加复杂。 在我真正参与之前,我只想问一下,XAML文件是构建WPF应用程序的唯一方法吗? 有更简单的方法吗? 我知道我可以学习使用WinForms,这看起来要容易得多,因为你基本上有一个Form对象可以使用代码,但就像我提到的那样我认为最好构建WPF应用程序

在RichEditBox中设置Text时的AccessViolationException

我花了好几个小时试图了解这里发生的事情。 我有一个RichEditBox,用户可以通过点击它,使用键盘或点击几个在RichEditBox中添加一些字符的按钮来与之交互。 这是我使用的方法: private void ptrPlus_click(object sender, RoutedEventArgs e) { try { myRichEditBox.Document.Selection.Text = “>”; myRichEditBox.Document.Selection.SetRange(this.Document.Selection.StartPosition + 1, this.Document.Selection.StartPosition + 1); } catch { // } } 什么有效: •如果我只使用键盘在RichEditBox中写入,它可以正常工作 •如果我只使用像这样的按钮,它可以正常工作,并且字符会被添加到RichEditBox中 什么行不通: •如果我在RichEditBox内部点击(要么在内部写入,要么只是为了使键盘出现,然后在它外部点击以关闭它),然后再次使用该按钮添加一些字符,它适用于前两个我按下按钮。 在第三个,我得到一个System.AccessViolationException和我的应用程序崩溃了 myRichEditBox.Document.Selection.Text = “>”; 应用程序崩溃,即使该行在try / catch中,我不知道为什么。 我尝试在RichEditBox获得焦点之前和之后检查Selection index位置和Selection lenght的状态,并且它似乎没有任何改变。 所以我真的不知道这里发生了什么:/ 在此先感谢您的帮助! 塞尔吉奥 编辑:我为LostFocus事件添加了这个处理程序: void MyRichEditBox_LostFocus(object sender, RoutedEventArgs e) { String temp; int […]