Tag: xaml

将自定义依赖项属性绑定到自定义WPF样式

设计inheritance的Expander时遇到问题。 我的目的是在切换按钮和默认Expander标头中的文本后面有一个进度条。 我有这个XAML代码,它给我标题中的进度条。 这是一种定制风格。 这工作正常但我无法绑定控制进度百分比的自定义依赖项属性。 public class ProgressExpander : Expander { static ProgressExpander() { DefaultStyleKeyProperty.OverrideMetadata(typeof(ProgressExpander), new FrameworkPropertyMetadata(typeof(ProgressExpander))); } public int Progress { get { return (int)GetValue(ProgressProperty); } set { SetValue(ProgressProperty, value); } } // Using a DependencyProperty as the backing store for Progress. This enables animation, styling, binding, etc… public static readonly DependencyProperty ProgressProperty = […]

如何在TabControl的ItemsSource绑定到WPF中的列表时设计TabPage?

这些是我的类: class mainViewModel { public List F { get; set; } public mainViewModel() { F=new List() { new Foo(new Animal(){Name = “Cat”}), new Foo(new Animal(){Name = “Dog”}), new Foo(new Animal(){Name = “Camel”}) }; } } public class Foo { public Animal Animal { get; set; } public Foo(Animal animal) { Animal = animal; } } […]

WPF中的条件样式

我做了一个使TextBlock看起来像链接的样式: 如何在TextBlock.Text以http://开头时应用它?

从代码中设置自定义MarkupExtension

如何从代码中设置自定义MarkupExtension ? 您可以轻松地从Xaml设置。 Binding和DynamicResource 。 通过代码设置相同的值需要一些不同的方法 绑定:使用textBox.SetBinding或BindingOperations.SetBinding Binding binding = new Binding(“MyFontSize”); BindingOperations.SetBinding(textBox, TextBox.FontSizeProperty, binding); DynamicResource:使用SetResourceReference textBox.SetResourceReference(TextBox.StyleProperty, “MyStyle”); CustomMarkup:如何从代码中设置自定义MarkupExtension ? 我应该调用ProvideValue吗?如何调用IServiceProvider ?* CustomMarkupExtension customExtension = new CustomMarkupExtension(); textBox.Text = customExtension.ProvideValue(??); 我在这个问题上发现了很少,所以可以做到吗? HB回答了这个问题。 只是在这里添加一些细节,为什么我想这样做。 我试图为以下问题创建一个解决方法。 问题是你无法从Binding派生并覆盖ProvideValue因为它是密封的。 您将不得不这样做: 自定义WPF绑定标记扩展的基类 。 但问题是当你将Binding返回到Setter会得到一个exception,但是在Style之外它可以正常工作。 我已经在几个地方读过你应该返回MarkupExtension本身,如果TargetObject是一个Setter ,一旦它被应用到一个实际的FrameworkElement就允许它重新进行revavuate,这是有道理的。 数据触发器中的标记扩展 MarkupExtension的巨大限制 自定义WPF绑定标记扩展的基类 (在注释中) 但是,仅当TargetProperty是object类型时才有效,否则返回exception。 如果你看一下BindingBase的源代码,你可以看到它确实如此,但看起来框架有一些秘密成分使它工作。

将属性添加到自定义WPF控件?

我今天早上刚开始参加WPF,所以这是(希望)一个容易解决的问题。 我开始创建一个具有渐变背景的按钮。 我想在控件的属性中声明渐变开始和结束颜色,然后将它们应用于模板中。 我在编译代码时遇到了麻烦。 我得到的例外是xaml告诉我属性不可访问但是当我将visiblity修饰符改为public时它会抱怨它无法找到静态属性… 到目前为止这是我的xaml: 这是我的自定义控件的代码: public class GradientButton : Button { static DependencyProperty GradientStartProperty; static DependencyProperty GradientEndProperty; static GradientButton() { GradientStartProperty = DependencyProperty.Register(“GradientStart”, typeof(Color), typeof(GradientButton)); GradientEndProperty = DependencyProperty.Register(“GradientEnd”, typeof(Color), typeof(GradientButton)); } public Color GradientStart { get { return (Color)base.GetValue(GradientStartProperty); } set { base.SetValue(GradientStartProperty, value); } } public Color GradientEnd { get { return […]

如何检测滚动查看器是否在winrt中到达底部

我想知道什么是检测ScrollViewer是否到达底部,右边等的最佳方法。 我想我可以通过使用PointerWheelChanged用于鼠标和ManipulationDelta进行触摸来实现这一点。 在这些事件处理程序中,我可以记录Horizo​​ntalOffset以找出滚动器何时到达结尾。 但我认为可能有更好的方法来做到这一点。 我发现了这篇文章 。 但压缩视觉状态似乎不适用于winrt。 不会调用CurrentStateChanging事件方法。 我还检查了另一篇文章 。 但它只适用于滚动条,而不是通用方法。 谁知道解决这个问题的最佳方法是什么?

列表框项目WPF,不同项目的不同背景颜色

我有一个WPF ListBox,其中包含我所拥有的特定类的项目的绑定列表。 像这样的东西: ObservableCollection tables = new ObservableCollection(); … listTables.ItemsSource = tables; 和XAML: 一切正常。 我现在要做的是对ListBox中的每个项目有不同的背景,具体取决于类的某个属性。 例如,假设MyTable类有一个名为isOccupied的属性。 如果为某个项目设置了这个标志,我希望它在ListBox中有一个红色背景,如果不是,那么我想让它具有绿色背景。 如果属性发生更改,则背景应相应更改。 有关如何实现这一目标的任何提示? 我正在查找有关ItemContainerStyle的一些信息,但我对此比较陌生,所以我不确定我是否遵循了正确的道路。

XAML无法编译,但没有任何错误消息,如果用户定义的对象是第一个资源,则紧跟x:Array资源

我发现这个问题很奇怪,可能是一个XAML / Visual Studio错误。 我希望其他人发现它不那么奇怪,并且解释为什么我正在做的事情是错误的,和/或更好的解决方法,而不仅仅是以不同的顺序声明资源。 我有这个简单的XAML: 0.25 当我尝试编译项目时,我收到以下错误: 1> … MainWindow.xaml.cs(25,13,​​25,32):错误CS0103:当前上下文中不存在名称“InitializeComponent” 我理解错误的含义,但不是为什么会发生错误。 XAML看起来很好,编译它没有错误,但由于某种原因,通常不会创建或使用InitializeComponent()的自动生成的.gics文件(即使文件来自之前的成功编译) ,它仍然没有编译到程序集中)。 如果我只是颠倒资源的顺序,它工作正常: 0.25 附加信息: A是我项目中的任何类。 出于此测试的目的,它被声明为class A { } ,即一个空类,但我首先遇到了将转换器实例放入资源的问题。 如果我使用内置类型而不是A ,例如Some string ,则不会发生错误。 如果我将一个内置类型的对象作为资源放在用户定义的类型A对象和我的数组资源对象之间, 它也可以正常工作 ! 换句话说,似乎有一个或多个用户定义的类型对象作为第一个资源元素,紧接着是一个数组对象,导致编译失败。 其他组合似乎工作得很好。 有人可以解释为什么这是预期的行为(除了重新安排我的资源,我应该做些什么来避免它),或者确认我认为这是XAML构建过程中的错误并不是完全疯了? 编辑: 鉴于这可能是一个真正的错误,我继续在这里打开一个Connect错误报告: https : //connect.microsoft.com/VisualStudio/feedback/details/1441123/xaml-fails-to-compile-without-error -if用户自定义对象-是先资源和-随后-立即逐-X-arrays资源 另请参阅相关/类似的Stack Overflow问题: 当前上下文中不存在名称“InitializeComponent”:奇怪的行为 编辑#2: WPF更新了Connect报告(参见上面的链接),声明该bug的修复程序将在下一版本的.NET中发布: Sachin [MSFT]于2016年3月9日下午3:53发布 WPF团队已经审查了这个问题,并在下一版本的.NET中修复。 我们感谢您的反馈,并考虑解决此问题 – WPF团队

仅从实体对象显示DataGrid中的某些列

我试图在VS2010中创建的实体模型上使用SQL查询填充DataGrid。 public List LoadMoviesMethod() { ObjectQuery _movies = dataEntities.MovieTables; var query = from MovieTable in _movies //where MovieTable.Rating == “R” //orderby MovieTable.id select MovieTable; return query.ToList(); } 导入数据库时​​会自动生成对象MovieTable,但是当它显示在网格上时,它会显示比我想要的更多的信息(id,EntityKey和EntityState)。 试图在对象中选择某些属性我得到了字符串并返回语句抱怨。 有没有办法选择MovieTable的某些成员在datagrid上显示? 也许指定我想要显示的列? 看起来很简单,但我想我还不够好想出来!!!!

如何从XAML访问元素资源中的故事板?

考虑以下代码: … 上面的代码没有问题。 现在,我想将MyStory关键帧值绑定到此用户控件的DP(名为SpecialColor ),如下所示: 这会出错: 无法冻结此Storyboard时间轴树以跨线程使用。 使用后面的代码可以做到这一点。 但是我怎么能只在XAML中做呢? 代码隐藏辅助解决方案: ► 步骤1:将MyStory故事板放入brdBase资源中。 … 错误: 找不到名为“MyStory”的资源。 资源名称区分大小写。 ► 步骤2:消除IsMouseOver属性上的IsMouseOver并从后面的代码开始MyStory 。 C#Code-Behind: private void brdBase_MouseEnter(object sender, MouseEventArgs e) { Border grdRoot = (Border)this.Template.FindName(“brdBase”, this); Storyboard story = grdRoot.Resources[“MyStory”] as Storyboard; story.Begin(this, this.Template); } ► 步骤3:解决方案已经完成,但第一次不起作用。 幸运的是,这个问题有一个解决方法。 将ControlTemplate放入Style足够了。 (我需要其他Trigger类型而不是EventTrigger并且必须使用ControlTemplate包装UserControl元素。) 更新: 关于使用ObjectDataProvider的想法失败了。 ObjectDataProvider资源不能用于提供故事板! 错误报告是: XamlParseException:设置属性’System.Windows.Media.Animation.BeginStoryboard.Storyboard’抛出exception。 InnerException: ‘System.Windows.Data.ObjectDataProvider’不是属性’Storyboard’的有效值。 AssociatedControl DP始终为空。 […]