C# 从样式WPF访问元素
我在ResourceDictionary中声明了这样一种风格C# 从样式WPF访问元素,c#,wpf,C#,Wpf,我在ResourceDictionary中声明了这样一种风格 <Style x:Key="MapMarkerLabelStyle" TargetType="{x:Type TextBlock}"> <Setter Property="RenderTransform"> <Setter.Value> <TranslateTransform X="{Binding ActualWidth,
<Style x:Key="MapMarkerLabelStyle" TargetType="{x:Type TextBlock}">
<Setter Property="RenderTransform">
<Setter.Value>
<TranslateTransform X="{Binding ActualWidth,
Converter={StaticResource DoubleMultiplierConverter},
ConverterParameter=-0.5}"
Y="-62"></TranslateTransform>
</Setter.Value>
</Setter>
</Style>
在translate转换中,我需要访问textblock ActualWidth属性,但无法确定绑定的外观。试试这个
<TranslateTransform X="{Binding RelativeSource={RelativeSource Self},
Path=ActualWidth,
Converter={StaticResource DoubleMultiplierConverter},
ConverterParameter=-0.5}"
Y="-62">
</TranslateTransform>
试试这个
<TranslateTransform X="{Binding RelativeSource={RelativeSource Self},
Path=ActualWidth,
Converter={StaticResource DoubleMultiplierConverter},
ConverterParameter=-0.5}"
Y="-62">
</TranslateTransform>
绑定缺少适当的源对象。要绑定到TextBlock的
ActualWidth
属性,您应该如下设置RelativeSource
:
<Style x:Key="MapMarkerLabelStyle" TargetType="TextBlock">
<Setter Property="RenderTransform">
<Setter.Value>
<TranslateTransform
X="{Binding Path=ActualWidth,
RelativeSource={RelativeSource AncestorType=TextBlock}
Converter={StaticResource DoubleMultiplierConverter},
ConverterParameter=-0.5}"
Y="-62"/>
</Setter.Value>
</Setter>
</Style>
绑定缺少适当的源对象。要绑定到TextBlock的
ActualWidth
属性,您应该如下设置RelativeSource
:
<Style x:Key="MapMarkerLabelStyle" TargetType="TextBlock">
<Setter Property="RenderTransform">
<Setter.Value>
<TranslateTransform
X="{Binding Path=ActualWidth,
RelativeSource={RelativeSource AncestorType=TextBlock}
Converter={StaticResource DoubleMultiplierConverter},
ConverterParameter=-0.5}"
Y="-62"/>
</Setter.Value>
</Setter>
</Style>
然后我得到以下System.Windows.Data错误:40:BindingExpression路径错误:“在“对象”“TranslateTransform”(HashCode=48937974)“上找不到ActualWidth”属性。BindingExpression:Path=ActualWidth;DataItem='TranslateTransform'(HashCode=48937974);目标元素是“TranslateTransform”(HashCode=48937974);目标属性为“X”(类型为“Double”),我尝试了这个。装订看起来不错。好像转换器出了问题。如果您共享它的代码就好了。Self
表示TranslateTransform,而不是TextBlock。它应该是RelativeSource={RelativeSource AncestorType=TextBlock}
。不,它仅表示TextBlock,因为样式的TargetType本身就是TextBlock。运行此代码并检查it@Parag你错了。而你没有“尝试这个”。如果你真的尝试过,你会发现它不起作用RelativeSource Self
始终表示绑定应用于的对象。然后我得到以下System.Windows.Data错误:40:BindingExpression路径错误:“在“对象”“TranslateTransform”(HashCode=48937974)上未找到ActualWidth”属性。BindingExpression:Path=ActualWidth;DataItem='TranslateTransform'(HashCode=48937974);目标元素是“TranslateTransform”(HashCode=48937974);目标属性为“X”(类型为“Double”),我尝试了这个。装订看起来不错。好像转换器出了问题。如果您共享它的代码就好了。Self
表示TranslateTransform,而不是TextBlock。它应该是RelativeSource={RelativeSource AncestorType=TextBlock}
。不,它仅表示TextBlock,因为样式的TargetType本身就是TextBlock。运行此代码并检查it@Parag你错了。而你没有“尝试这个”。如果你真的尝试过,你会发现它不起作用RelativeSource Self
始终表示应用绑定的对象。显然,您正在尝试将文本块居中于给定位置。将水平对齐设置为居中不起作用吗?将TranslateTransform设置为文本块居中可能不是最好的方法。把文本块放在一个固定大小的居中面板的中心,让WPF布局来完成这项工作,怎么样?显然你是想把文本块放在一个给定的位置。将水平对齐设置为居中不起作用吗?将TranslateTransform设置为文本块居中可能不是最好的方法。将TextBlock放在固定大小的中心面板中,让WPF layout来完成这项工作,怎么样?使用AncestorType=TextBlock,我会收到以下错误消息:System.Windows.Data错误:4:找不到用于绑定的源,引用为“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.TextBlock',AncestorLevel='1'。BindingExpression:Path=ActualWidth;DataItem=null;目标元素是“TranslateTransform”(HashCode=62126894);目标属性是'X'(类型'Double')好吧,这对我来说是可行的,尽管没有转换器。你是用一种真正针对文本块的风格来做的吗?我在我的原始帖子中添加了我的转换器。我的stylecode有targettype=textblock我试图从绑定中删除转换器,我仍然得到相同的错误你在VS输出窗口中得到过错误消息,但是绑定工作正常。。。只需忽略错误消息。使用AncestorType=TextBlock,我会收到此错误消息:System.Windows.Data错误:4:找不到用于绑定的源,引用为“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.TextBlock',AncestorLevel='1'。BindingExpression:Path=ActualWidth;DataItem=null;目标元素是“TranslateTransform”(HashCode=62126894);目标属性是'X'(类型'Double')好吧,这对我来说是可行的,尽管没有转换器。你是用一种真正针对文本块的风格来做的吗?我在我的原始帖子中添加了我的转换器。我的stylecode有targettype=textblock我试图从绑定中删除转换器,我仍然得到相同的错误你在VS输出窗口中得到过错误消息,但是绑定工作正常。。。只需忽略错误消息。