C# WPF自定义属性
我已经向ProgresBar控件添加了一个新属性,但我认为我做得不对。下面是MainWindow.xaml中的progressbar,我需要有两个值,它们之间有一个间隙C# WPF自定义属性,c#,wpf,C#,Wpf,我已经向ProgresBar控件添加了一个新属性,但我认为我做得不对。下面是MainWindow.xaml中的progressbar,我需要有两个值,它们之间有一个间隙 <ProgressBar Style="{StaticResource CircularProgress}" Value="50" Extensions:CustomExtensions.Radius="140 0" /> 这里是我使用这个自定义属性
<ProgressBar Style="{StaticResource CircularProgress}"
Value="50"
Extensions:CustomExtensions.Radius="140 0" />
这里是我使用这个自定义属性的地方,它不起作用
<PathFigure x:Name="pathFigure" StartPoint="{Binding Path=Radius, RelativeSource={RelativeSource TemplatedParent}}">
我的原始答案是错误的,附加属性的类型定义正确,应该是
CustomExtensions
而不是ProgressBar
ownerType—正在注册依赖项属性的所有者类型。
您必须将附加属性typeof(ProgressBar)
以下是您可以轻松测试的方法
<ProgressBar x:Name="testProgressBar"
Value="50"
local:CustomExtensions.Radius="140 0" />
<TextBlock Text="{Binding ElementName=testProgressBar, Path=Radius}"/>
如果绑定到附加属性,则必须使用特殊语法(附加属性周围有括号)。此外,还应指定一个转换器将字符串转换为点 以下是一个例子:
<PathFigure x:Name="pathFigure" StartPoint="{Binding Path=(Extensions:CustomExtensions.Radius), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource pointConverter}">
编辑:
我无法复制您的问题。
我使用以下代码,文本块具有正确的输出:
<ProgressBar Extensions:CustomExtensions.Radius="80" Name="test"/>
<TextBlock Text="{Binding ElementName=test, Path=(Extensions:CustomExtensions.Radius)}"/>
对于我来说,使用元素绑定时,路径只使用“Radius”(正如我在更改附加属性后的回答中所说的),因此如果错误不是来自此,我想可能是来自上一个绑定(尝试不使用它->像第一个示例中那样提供硬编码值)
<ProgressBar x:Name="testProgressBar"
Value="50"
local:CustomExtensions.Radius="140 0" />
<TextBlock Text="{Binding ElementName=testProgressBar, Path=Radius}"/>
<PathFigure x:Name="pathFigure" StartPoint="{Binding Path=(Extensions:CustomExtensions.Radius), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource pointConverter}">
<ProgressBar Extensions:CustomExtensions.Radius="80" Name="test"/>
<TextBlock Text="{Binding ElementName=test, Path=(Extensions:CustomExtensions.Radius)}"/>