当前位置: 首页 > 知识库问答 >
问题:

WPF依赖项属性

仲孙凡
2023-03-14

我很难理解WPF中的依赖属性,可能是因为我要找的用例非常具体,没有很好的文档化。

我有一个自定义控件,看起来像这样(请忽略所有可怕的代码,这是暂时的!):

<UserControl x:Class="HydroAccessory.Controls.FillGraph"
         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:HydroAccessory.Controls"
         mc:Ignorable="d"
         SizeChanged="FillGraph_SizeChanged"
         d:DesignHeight="200" d:DesignWidth="300">
<Grid>

    <TextBlock x:Name="PercentageTB" Text="Fill Percentage: 0%" />

</Grid>

我这样称呼它在我的主窗口内:

<controls:FillGraph x:Name="HydroModel" />
using System;
using System.Windows;
using System.Windows.Controls;

namespace HydroAccessory.Controls
{
public partial class FillGraph : UserControl
{
    private float percentage;
    public float Percentage
    {
        get
        {
            return percentage;
        }
        set
        {
            percentage = value;
            PercentageTB.Text = String.Format("Fill Percentage: {0}", percentage.ToString() + "%");
        }
    }

    public FillGraph()
    {
        InitializeComponent();
    }
}
}

我只想在主窗口中的自定义控件调用中说:

<controls:FillGraph x:Name="HydroModel" Percentage="{Binding FillPercentage}" />

(其中fillPercent是另一个脚本中不需要担心的内容)。该控件将被展开,因此需要保持为自定义控件。我明白我可能需要依赖属性,但在尝试了许多不同的方法后,我无法弄清楚如何完成这个看似简单的任务。感谢帮助。

共有1个答案

龙新荣
2023-03-14

代码中没有依赖项属性。

这是一个依赖项属性:

public partial class FillGraph : UserControl
{
    public FillGraph()
    {
        InitializeComponent();
    }

    public float Percentage
    {
        get { return (float)GetValue(PercentageProperty); }
        set { SetValue(PercentageProperty, value); }
    }

    //  Using a DependencyProperty as the backing store for Percentage.  This 
    //  enables animation, styling, binding, etc...
    public static readonly DependencyProperty PercentageProperty =
        DependencyProperty.Register("Percentage", typeof(float), 
                typeof(FillGraph), new PropertyMetadata(0.0f));
}

正如Ayyappan Subramanian所建议的,Visual Studio中的propdp代码段将有助于创建样板文件。只要小心传递给DependencyProperty.Register()的参数,并确保传递给New PropertyMetadata()的默认值是正确的类型。0.0f是浮点数。如果为float属性传递整数0,它将在运行时引发异常。

<Grid>
    <TextBlock 
        Text="{Binding Percentage, RelativeSource={RelativeSource AncestorType=UserControl}, StringFormat='Fill Percentage: {0:#.##}%'}" 
        />
</Grid>
    <TextBlock 
        Text="{Binding Percentage, StringFormat='Fill Percentage: {0:p2}', RelativeSource={RelativeSource AncestorType=UserControl}}" 
        />
<controls:FillGraph x:Name="HydroModel" Percentage="{Binding FillPercentage}" />
 类似资料:
  • 本文向大家介绍wpf 只读依赖项属性,包括了wpf 只读依赖项属性的使用技巧和注意事项,需要的朋友参考一下 示例 何时使用 只读的依赖项属性与普通的依赖项属性相似,但其结构不允许从控件外部设置其值。如果您拥有仅供消费者参考的属性,则此方法很好用,例如IsMouseOver或IsKeyboardFocusWithin。 如何定义 与标准依赖项属性一样,只读依赖项属性必须在从派生的类上定义Depend

  • 本文向大家介绍wpf 标准依赖项属性,包括了wpf 标准依赖项属性的使用技巧和注意事项,需要的朋友参考一下 示例 何时使用 几乎所有的WPF控件都大量使用依赖属性。依赖项属性允许使用许多仅标准CLR属性无法使用的WPF功能,包括但不限于对样式、动画、数据绑定、值继承和更改通知的支持。 TextBox.Text属性是需要标准依赖项属性的简单示例。在这里,如果Text是标准的CLR属性,则无法进行数据

  • 本文向大家介绍wpf 附加的依赖项属性,包括了wpf 附加的依赖项属性的使用技巧和注意事项,需要的朋友参考一下 示例 何时使用 附加属性是一种依赖项属性,可以将其应用于任何属性,DependencyObject以增强了解该属性存在的各种控件或服务的行为。 附加属性的一些用例包括: 有一个父元素遍历其子元素并以某种方式作用于子元素。例如,Grid控制使用Grid.Row,Grid.Column,Gr

  • 我给ivy添加了一个依赖项(我们称之为a)。在maven central中具有pom文件的xml。Ivy使用ibiblio来解析maven依赖项。添加到常春藤中的依赖项(A)。xml具有可传递依赖项(B)。到目前为止,一切都很好。传递依赖(B)的依赖(C)不能用常春藤来解决。 我在常春藤上定义了一个新的名字。如下所示的xml: 在B的pom文件中,C在编译和测试范围中定义如下: 当我在ivy的缓存

  • 最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个

  • 当我对pom文件的属性部分中定义的键的依赖项使用version时,依赖项不会被下载,但是当我对依赖项的version进行硬编码时,依赖项会被下载。 repo.maven.apache.org/maven2/info/cukes/cucumber-java/{cucumber-version}/cucumber-java-{cucumber-version}.pom 为什么不是用在propertie