[Wpf] لا يعمل ملقم وف مع سترينجفورمات على تلميحات الأدوات


Answers

قد يكون علة. عند استخدام بنية قصيرة ل تلميح:

<TextBox ToolTip="{Binding WhatEverYouWant StringFormat='It is: \{0\}'}" />

يتم تجاهل سترينغفورمات ولكن عند استخدام بناء جملة موسع:

<TextBox Text="text">
   <TextBox.ToolTip>
      <TextBlock Text="{Binding WhatEverYouWant StringFormat='It is: \{0\}'}"/>
   </TextBox.ToolTip>
</TextBox>

يعمل كما هو متوقع.

Question

تحتوي التعليمات البرمجية التالية على ارتباط بسيط الذي يربط نص تكستبلوك المسمى ميتكستبلوك إلى نص نص وخاصية تولتيب باستخدام نفس التضمين التجليد:

<StackPanel>
    <TextBlock x:Name="MyTextBlock">Foo Bar</TextBlock>
    <TextBox    Text="{Binding ElementName=MyTextBlock, Path=Text, StringFormat='It is: \{0\}'}"
             ToolTip="{Binding ElementName=MyTextBlock, Path=Text, StringFormat='It is: \{0\}'}" />
</StackPanel>

يستخدم الارتباط أيضا الخاصية سترينغفورمات التي تم تقديمها مع .NET 3.5 SP1 الذي يعمل بشكل جيد الخاصية النص أعلاه ولكن يبدو أن كسر ل تولتيب. النتيجة المتوقعة هي "إيت: فو بار" ولكن عند تحريك الماوس فوق مربع النص، يظهر تلميح الأدوات قيمة الارتباط فقط، وليس القيمة المنسقة لسلسلة. أيه أفكار؟




يمكن أن تكون الشفرة قصيرة كما يلي:

<TextBlock ToolTip="{Binding PrideLands.YearsTillSimbaReturns,
    Converter={StaticResource convStringFormat},
    ConverterParameter='Rejoice! Just {0} years left!'}" Text="Hakuna Matata"/>

سنستخدم حقيقة يتم تجاهل المحولات أبدا، على عكس سترينغفورمات.

وضع هذا في StringFormatConverter.cs :

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace TLKiaWOL
{
    [ValueConversion (typeof(object), typeof(string))]
    public class StringFormatConverter : IValueConverter
    {
        public object Convert (object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (ReferenceEquals(value, DependencyProperty.UnsetValue))
                return DependencyProperty.UnsetValue;
            return string.Format(culture, (string)parameter, value);
        }

        public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
}

وضع هذا في ResourceDictionary.xaml الخاص بك:

<conv:StringFormatConverter x:Key="convStringFormat"/>