WPF和Silverlight中支持数据绑定的属性,包括样式,继承,动画和默认值。它允许您在DependencyObject上设置附加属性。
如何将自定义 UserControl 的依赖属性双向绑定到另一个 UserControl 的 DataContext 的属性?
我有一个用户控件,其代码隐藏已声明依赖属性。我还有另一个 UserControl 作为主 UI。 主 UI 用户控件已将其 DataContext 设置为 viewmo...
我试图在自定义控件中设置 SKQuantitySpinEdit 父类的增量属性,但无法这样做! ControlTemplate spinOptLegQuantityTemplate = (ControlTemplate)(grdMultiF...
MVVM、XAML、C# - DependencyProperty - ItemsControl 中的 ObservableCollection 无法识别 Property
我对 MVVM 和 c# 系统相当陌生,只是将其用作一个小小的业余爱好。在过去的三天里,我一直对以下问题感到绝望。 我有一个带有相应的自定义控件视图...
无法实例化[org.flywaydb.core.Flyway]:工厂方法“flyway”抛出异常并显示消息:名称不能为空
spring从2.7.x升级到3.2.1版本后 并将 Flyway 从 8.5 升级到版本 10.4.1 时,我收到了如标题所示的异常: 无法实例化 [org.flywaydb.core.Flyway]:工厂
WPF 绑定到 UserControl 的 DependencyProperty 未按预期工作[重复]
我在 DependecyProperty 绑定方面遇到一些奇怪的问题。 为了使问题更简单,我创建了一些虚拟控件,它具有相同的不需要的行为 我有一个用户控件,它有一个
我在绑定到自定义控件上的依赖属性时遇到问题。 这是我的自定义控件。它基本上是一个文本框,只允许数字输入并公开“值”依赖项
ObservableCollection 绑定到另一个 ObservableCollection 不会触发 CollectionChanged
我有 ControlA 托管 ControlB,它们都有 ObservableCollection 类型的 DependencyProperty,嵌套控件的 (ControlB) 属性绑定到父级 (ControlA) 属性,如果有的话
我想创建一个具有多个 WPF 依赖属性的自定义控件。 属性之一是返回 Thickness 对象。 自定义控件应该适合设计使用...
当我在运行时设置 IsClosed 的值时,OnIsClosedChanged() 会被调用。 但是,设计器设置属性的值,但不会调用 OnIsClosedChanged()。 公共静态
<Setter Property="Height" Value="22"/> <Setter Property="Padding" </desc> <question vote="0"> <pre><code><Style x:Key="DeckButton_Help" TargetType="{x:Type Button}"> <Setter Property="Height" Value="22"/> <Setter Property="Padding" Value="0,0"/> <Setter Property="Margin" Value="0,0"/> <Setter Property="Content" Value=""/> <Setter Property="local:ButtonProperties.ImageSource" Value=""/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Button Style="{StaticResource ButtonForeground}" HorizontalContentAlignment="Left" Background="#e1e1e1" BorderBrush="#9d9d9d" Command="{TemplateBinding Command}" Padding="5,4,0,0" > <Button.Content> <Grid Height="16"> <Grid.ColumnDefinitions> <ColumnDefinition Width="16"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Image Style="{StaticResource ButtonImage}" Height="16" Width="16" Source="{TemplateBinding local:ButtonProperties.ImageSource}" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,-4,0,0"/> <TextBlock Grid.Column="1" Text="{TemplateBinding Content}" HorizontalAlignment="Center" Margin="5,0,0,0" /> </Grid> </Button.Content> </Button> </ControlTemplate> </Setter.Value> </Setter> </Style> </code></pre> <p>这里我尝试从外部按钮设置 local:ButtonProperties.ImageSource 属性。</p> <pre><code><Button local:ButtonProperties.ImageSource="/CommonResources;component/bitmap/IDB_BUTTON_HELP.PNG" Style="{StaticResource DeckButton_Help}" Command="{Binding HelpCommand}" Content="Help" Margin="20,0,0,0" Width="65" /> </code></pre> <p>而 ButtonProperties 是这样定义的:</p> <pre><code>public class ButtonProperties { public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.RegisterAttached( "ImageSource", typeof(string), typeof(ButtonProperties), new FrameworkPropertyMetadata(null)); public static string GetImageSource(DependencyObject obj) { return (string)obj.GetValue(ImageSourceProperty); } public static void SetImageSource(DependencyObject obj, string value) { obj.SetValue(ImageSourceProperty, value); } } </code></pre> <p>问题是图标没有设置,当我调试时,SetImageSource和GetImageSource没有被调用。</p> </question> <answer tick="true" vote="1"> <p>您可以使用常规 Binding 来代替 TemplateBinding,如下所示。它将提供从字符串到 ImageSource 的自动类型转换。</p> <pre><code><Image ... Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(local:ButtonProperties.ImageSource)}"/> </code></pre> <p>如果您正确设置图像路径,这应该可以工作(我已经在我的设备上测试了代码)。</p> <hr/> <p>然而,将附加属性声明为 <pre><code>ImageSource</code></pre> 而不是 <pre><code>string</code></pre> 是有意义的,这样 TemplateBinding 也可以工作。当您在 Button 上分配附加属性时,就会发生从字符串到 ImageSource 的转换,并且附加属性不能包含任何无效字符串。</p> <pre><code>public class ButtonProperties { public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.RegisterAttached( "ImageSource", typeof(ImageSource), typeof(ButtonProperties)); public static ImageSource GetImageSource(DependencyObject obj) { return (ImageSource)obj.GetValue(ImageSourceProperty); } public static void SetImageSource(DependencyObject obj, ImageSource value) { obj.SetValue(ImageSourceProperty, value); } } </code></pre> <hr/> <p>旁注:</p> <ol> <li>在某些情况下,依赖属性 setter 和 getter 中的断点不会被击中,例如当在 XAML 中设置属性时。框架直接调用SetValue和GetValue。</li> <li>如果<pre><code>string</code></pre>类型的属性的默认值为null,则不需要在属性定义中使用<pre><code>new FrameworkPropertyMetadata(null)</code></pre>,也不需要在样式定义中使用<pre><code><Setter Property="local:ButtonProperties.ImageSource" Value=""/></code></pre>。</li> </ol> </answer> <answer tick="false" vote="0"> <p>TemplateBinding 不会执行自动类型转换,正如您在 Binding 中所期望的那样</p> <pre><code>Source="{TemplateBinding local:ButtonProperties.ImageSource} </code></pre> <p>其中源属性的类型为 <pre><code>string</code></pre>,目标属性的类型为 <pre><code>ImageSource</code></pre>。</p> <p>您必须在附加属性的声明中使用正确的类型:</p> <pre><code>public class ButtonProperties { public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.RegisterAttached( "ImageSource", typeof(ImageSource), typeof(ButtonProperties)); public static ImageSource GetImageSource(DependencyObject obj) { return (ImageSource)obj.GetValue(ImageSourceProperty); } public static void SetImageSource(DependencyObject obj, ImageSource value) { obj.SetValue(ImageSourceProperty, value); } } </code></pre> <hr/> <p>您还必须删除 Setter </p> <pre><code><Setter Property="local:ButtonProperties.ImageSource" Value=""/> </code></pre> <p>来自按钮样式,因为空字符串对于 ImageSource 类型的属性来说不是有效值。</p> <hr/> <p>请注意,当在 XAML 中设置 <pre><code>SetImageSource</code></pre> 属性时,不会调用 <pre><code>ImageSource</code></pre> 方法。框架绕过setter和getter,直接调用<pre><code>SetValue</code></pre>和<pre><code>GetValue</code></pre>。</p> </answer> </body></html>
<Setter Property="Height" Value="22"/> <Setter Property="Padding" </desc> <question vote="0"> <pre><code><Style x:Key="DeckButton_Help" TargetType="{x:Type Button}"> <Setter Property="Height" Value="22"/> <Setter Property="Padding" Value="0,0"/> <Setter Property="Margin" Value="0,0"/> <Setter Property="Content" Value=""/> <Setter Property="local:ButtonProperties.ImageSource" Value=""/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Button Style="{StaticResource ButtonForeground}" HorizontalContentAlignment="Left" Background="#e1e1e1" BorderBrush="#9d9d9d" Command="{TemplateBinding Command}" Padding="5,4,0,0" > <Button.Content> <Grid Height="16"> <Grid.ColumnDefinitions> <ColumnDefinition Width="16"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Image Style="{StaticResource ButtonImage}" Height="16" Width="16" Source="{TemplateBinding local:ButtonProperties.ImageSource}" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,-4,0,0"/> <TextBlock Grid.Column="1" Text="{TemplateBinding Content}" HorizontalAlignment="Center" Margin="5,0,0,0" /> </Grid> </Button.Content> </Button> </ControlTemplate> </Setter.Value> </Setter> </Style> </code></pre> <p>这里我尝试从外部按钮设置 local:ButtonProperties.ImageSource 属性。</p> <pre><code><Button local:ButtonProperties.ImageSource="/CommonResources;component/bitmap/IDB_BUTTON_HELP.PNG" Style="{StaticResource DeckButton_Help}" Command="{Binding HelpCommand}" Content="Help" Margin="20,0,0,0" Width="65" /> </code></pre> <p>而 ButtonProperties 是这样定义的:</p> <pre><code>public class ButtonProperties { public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.RegisterAttached( "ImageSource", typeof(string), typeof(ButtonProperties), new FrameworkPropertyMetadata(null)); public static string GetImageSource(DependencyObject obj) { return (string)obj.GetValue(ImageSourceProperty); } public static void SetImageSource(DependencyObject obj, string value) { obj.SetValue(ImageSourceProperty, value); } } </code></pre> <p>问题是图标没有设置,当我调试时,SetImageSource和GetImageSource没有被调用。</p> </question> <answer tick="false" vote="0"> <p>附加属性应该像这样使用</p> <pre><code><Image Style="{StaticResource ButtonImage}" Height="16" Width="16" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(local:ButtonProperties.ImageSource)}" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,-4,0,0"/> </code></pre> <p>如果您正确设置图像路径,这应该可以工作(我已经在我的设备上测试了代码)。</p> </answer> </body></html>
为什么ItemsControl中的所有TextBox都使用最后动态添加的ValidationRule?
我有一个自定义文本框,在设置 Min 和 Max 属性时添加 MinMaxValidationRule 公共类 TextBox2 :文本框 { 公共静态只读 DependencyProperty MinProperty =
在UserControl.xaml中: 在 UserControl.xaml 中: <UserControl x:Class="OurNameSpace.SystemCalibration.Controls.PortSelector" xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:d=http://schemas.microsoft.com/expression/blend/2008 xmlns:local="clr-namespace:OurNamespace.SystemCalibration.Controls" xmlns:converters="clr-namespace:OurNamespace.SystemCalibration.Converters" xmlns:sys="clr-namespace:System;assembly=mscorlib" x:Name="portSelector" mc:Ignorable="d"> <Grid ….. <StackPannel …. <CheckBox Content="Port 4" Margin="0 5 0 5" IsChecked="{Binding cb4_IsChecked, ElementName=portSelector, UpdateSourceTrigger=PropertyChanged}"> <CheckBox.Visibility> <MultiBinding Converter="{StaticResource maxPortsToVisibilityConverter}"> <Binding Path="MaxPorts" ElementName="portSelector"/> <Binding Source="{StaticResource port4}"/> </MultiBinding> </CheckBox.Visibility> </CheckBox> </StackPanel> </Grid> 在 usercontrol.xaml.cs 中: public partial class PortSelector : UserControl { public static readonly DependencyProperty cb4_isCheckedProperty = DependencyProperty.Register(nameof(cb4_IsChecked), typeof(bool), typeof(PortSelector)); public bool cb4_IsChecked { get => (bool)GetValue(cb4_isCheckedProperty); set { SetValue(cb4_isCheckedProperty, value); UpdatedSelectedPortsString(); } } } 如果我在调用“UpdatedSelectedPortsString”的线路上放置一个中断,则断点永远不会被命中。 此用户控件托管在 TabControl 内的另一个用户控件内。当我单击该复选框时,我希望执行依赖属性的 Set 部分,但该代码似乎根本没有被调用。我什至尝试向 IsChecked 绑定添加一个假值转换器,并且转换器内的代码确实执行,但设置器不执行。如果我不绑定 IsChecked,而是添加具有依赖属性的 Command 绑定,并将命令处理程序放在同一 usercontrol.xaml.cs 代码隐藏部分类中,它也可以工作。唯一似乎不起作用的是直接绑定 IsChecked。 您必须使用 PropertyChangedCallback 委托,如下所示: public static readonly DependencyProperty cb4_IsCheckedProperty = DependencyProperty.Register(nameof(cb4_IsChecked), typeof(bool), typeof(PortSelector), new PropertyMetadata(false, cb4_IsCheckedChangedCallback)); public bool cb4_IsChecked { get { return (bool)GetValue(cb4_IsCheckedProperty); } set { SetValue(cb4_IsCheckedProperty, value); } } private static void cb4_IsCheckedChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { PortSelector uc = d as PortSelector; uc.UpdatedSelectedPortsString(); } 每次 IsChacked 更改时都会调用“cb4_IsCheckedChangedCallback”方法。 如果这不起作用。此代码应该用于绑定: IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:PortSelector}}, Path=cb4_IsChecked}"
我仅用代码创建了一个自定义控件,我希望它的占用空间尽可能小,因为它将根据样式模板内网格中的值进行重复。目前它工作一些...
NavigationView.ClearValue(NavigationView.MenuItemsProperty) 总是抛出 System.ArgumentException
var temp = new NavigationView(); temp.ClearValue(NavigationView.MenuItemsProperty); // System.ArgumentException:“值不在预期范围内。” // 发生异常:'System.
以下只是对问题核心的总结。我把有一个依赖属性的类定义如下: public class TestMap : DependencyObject { public bool TestProperty ...。
如何在FolderBrowserDialog中设置只读属性?
我在我的应用程序中使用自定义的WPF FolderBrowserDialog来导出数据到特定的文件夹位置。它有只读属性SelectedPath, RootPath,其他属性和依赖...
如何使依赖对象属性的数组可以绑定,以便以后作为静态资源进行绑定?我现在的代码,似乎我的DependencyObject绕过了依赖属性系统......。
如何在MVVM框架中正确地绑定到usercontrol的依赖属性上
我一直找不到一个干净、简单的例子来说明如何在MVVM框架内用WPF正确地实现一个有DependencyProperty的usercontrol。我的下面的代码失败了,每当我把 ...
我有一个文本框数据绑定到一个字符串,UpdateSourceTrigger = PropertyChanged。我想只允许用户在文本框中输入整数。我还希望整数值的最小值为 ...