Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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# 将标签内容设置为Image';工具提示_C#_Wpf_Visual Studio 2010 - Fatal编程技术网

C# 将标签内容设置为Image';工具提示

C# 将标签内容设置为Image';工具提示,c#,wpf,visual-studio-2010,C#,Wpf,Visual Studio 2010,我正在使用IValueconverter界面更改图像的工具提示文本。 工具提示应根据标签进行更改 <Label Content="9898980001" Height="28" HorizontalAlignment="Left" Margin="1733,231,0,0" Name="lbl02scanning" VerticalAlignment="Top" Foreground="Blue" > <Image Height="49" HorizontalAlignmen

我正在使用IValueconverter界面更改图像的工具提示文本。
工具提示应根据标签进行更改

<Label Content="9898980001" Height="28" HorizontalAlignment="Left" Margin="1733,231,0,0" Name="lbl02scanning" VerticalAlignment="Top" Foreground="Blue" >

<Image Height="49" HorizontalAlignment="Right" Margin="0,131,113,0" 
       Name="img02scanning"
       Source="/TEST;component/Images/LoadingStation.png" Stretch="Fill" 
       VerticalAlignment="Top" Width="30" Cursor="Hand">
    <Image.ToolTip>
        <StackPanel Background="AliceBlue">
            <TextBlock Padding="5" Foreground="White" MinHeight="20"
                       Background="Blue" FontWeight="Bold" 
                       Text="Scanning Station" />
             <StackPanel Orientation="Horizontal">
                <Image 
   Source="pack://application:,,,/TEST;component/Images/coilonsaddle_large.png" 
   Height="100" Width="100" />
                 <TextBlock Padding="10" TextWrapping="WrapWithOverflow"
                            MaxWidth="200" Background="AliceBlue"
                            Foreground="Black" FontWeight="Bold"
                            Text="{Binding ElementName=lbl02scanning, Path=Name, 
                                           ConverterParameter=255,
                             Converter={StaticResource FormatterFOrCoilToolTip}}"/>                                       
              </StackPanel>
              <TextBlock Padding="5" Foreground="White" MinHeight="20" 
                         Background="Blue" FontWeight="Bold"
                         Text="Report to admin in case of coil location mismatch"/>
         </StackPanel>
    </Image.ToolTip>  
</Image>
工具提示的文本块内容没有更改。但如果我改为:

Text="{Binding  ConverterParameter=255, Converter={StaticResource FormatterFOrCoilToolTip}}
然后它就开始工作了。但是我想传递LBL02扫描文本值。为什么它不工作???

试试这个

Text="{Binding Path=Content,ElementName=lbl02scanning, ConverterParameter=255, Converter={StaticResource FormatterFOrCoilToolTip}}

首先,您应该绑定到
内容
属性,而不是
名称
属性,以防需要标签文本

最重要的是,工具提示与标签不在同一个可视树中,因此无法使用elementName进行绑定。但是,即使元素不存在于同一可视树中,也可以使用获取该元素

Text="{Binding Source={x:Reference lbl02scanning}, Path=Content, 
               ConverterParameter=255,
               Converter={StaticResource FormatterFOrCoilToolTip}}"/>
注-x:WPF 4.0中引入了引用。如果您使用的是WPF 3.5,则不能使用此功能。


更新以了解错误-服务提供程序缺少名称解析程序服务

刚刚发现的bug报告在
x:Reference失败,如果目标是Label
。然而,我无法在我的终端复制这个问题,因为我已经在我的终端安装了WPF4.5,我想他们已经在未来的版本中修复了这个问题

如果您的目标是WPF 4.0,我建议您使用
TextBlock
代替
Label

<TextBlock Text="9898980001" Height="28" HorizontalAlignment="Left"
           Margin="1733,231,0,0" Name="lbl02scanning" VerticalAlignment="Top" 
           Foreground="Blue" />
或者,您可以参考“变通方法”部分下提供的变通方法

您可以重写引用类的ProvideValue方法,并在设计时跳过引用搜索登录:

[ContentProperty("Name")]
public class Reference : System.Windows.Markup.Reference
{
    public Reference()
        : base()
    { }

    public Reference(string name)
        : base(name)
    { }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        IProvideValueTarget valueTargetProvider = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;

        if (valueTargetProvider != null)
        {
            DependencyObject targetObject = valueTargetProvider.TargetObject as DependencyObject;

            if (targetObject != null && DesignerProperties.GetIsInDesignMode(targetObject))
            {
                 return null;
            }
        }

        return base.ProvideValue(serviceProvider);
    }

使用其他解决方案更新

这将适用于所有版本的WPF 3.5、WPF 4.0和WPF 4.5

首先将图像标签与标签内容绑定

Second将stackPanel置于工具提示控件内,以便 利用PlacementTarget财产

第三个与PlacementTarget绑定。工具提示的标记

相关代码如下所示:

<Image Tag="{Binding ElementName=lbl02scanning,Path=Content}">
   <Image.ToolTip>
      <ToolTip>
          <TextBlock Text="{Binding RelativeSource={RelativeSource 
                                    Mode=FindAncestor, AncestorType=ToolTip},
                                    Path=PlacementTarget.Tag,
                                    ConverterParameter=255,
                           Converter={StaticResource FormatterFOrCoilToolTip}}"/>
       </ToolTip>
   </Image.ToolTip>
</Image>

LBL02扫描
在哪里声明?在已发布的XAML中找不到。@RohitVats格式相同。。现在更新显示“服务提供程序缺少名称解析程序服务”更新了一些其他方法。看看这是否有帮助。:)
[ContentProperty("Name")]
public class Reference : System.Windows.Markup.Reference
{
    public Reference()
        : base()
    { }

    public Reference(string name)
        : base(name)
    { }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        IProvideValueTarget valueTargetProvider = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;

        if (valueTargetProvider != null)
        {
            DependencyObject targetObject = valueTargetProvider.TargetObject as DependencyObject;

            if (targetObject != null && DesignerProperties.GetIsInDesignMode(targetObject))
            {
                 return null;
            }
        }

        return base.ProvideValue(serviceProvider);
    }
<Image Tag="{Binding ElementName=lbl02scanning,Path=Content}">
   <Image.ToolTip>
      <ToolTip>
          <TextBlock Text="{Binding RelativeSource={RelativeSource 
                                    Mode=FindAncestor, AncestorType=ToolTip},
                                    Path=PlacementTarget.Tag,
                                    ConverterParameter=255,
                           Converter={StaticResource FormatterFOrCoilToolTip}}"/>
       </ToolTip>
   </Image.ToolTip>
</Image>
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        if (value != null)
        {
            if (parameter.ToString() == "02")
            {
                return value.ToString() + " Starting";
            }
            else
            {
                return value.ToString() + " Finishing";
            }
        }
        return String.Empty;
    }