Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从样式WPF访问元素_C#_Wpf - Fatal编程技术网

C# 从样式WPF访问元素

C# 从样式WPF访问元素,c#,wpf,C#,Wpf,我在ResourceDictionary中声明了这样一种风格 <Style x:Key="MapMarkerLabelStyle" TargetType="{x:Type TextBlock}"> <Setter Property="RenderTransform"> <Setter.Value> <TranslateTransform X="{Binding ActualWidth,

我在ResourceDictionary中声明了这样一种风格

<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输出窗口中得到过错误消息,但是绑定工作正常。。。只需忽略错误消息。