لا يعمل WPF الربط مع StringFormat على تلميحات الأدوات



2 Answers

يمكن أن يكون علة. عند استخدام بناء الجملة المختصر لـ tooltip:

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

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

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

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

Question

يحتوي التعليمة البرمجية التالية على ربط بسيط الذي يربط نص TextBlock المسمى MyTextBlock إلى TextBox 's Text و ToolTip باستخدام نفس الترميز Binding:

<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>

يستخدم الربط أيضاً الخاصية StringFormat المقدمة مع .NET 3.5 المزود بحزمة الخدمة SP1 والتي تعمل بشكل جيد من أجل الخاصية Text أعلاه ولكن يبدو أن يكون مقطوعة لـ ToolTip. تكون النتيجة المتوقعة "It: Foo Bar" ولكن عندما تقوم بتمرير مؤشر الماوس فوق TextBox ، يعرض ToolTip قيمة الربط فقط ، وليس قيمة السلسلة المنسقة. أيه أفكار؟




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

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

سنستخدم الحقيقة لا يتم تجاهل المحولات أبداً ، بخلاف StringFormat.

ضع هذا في 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"/>



ما يلي هو حل wordy لكنه يعمل.

<StackPanel>
  <TextBox Text="{Binding Path=., StringFormat='The answer is: {0}'}">
    <TextBox.DataContext>
      <sys:Int32>42</sys:Int32>
    </TextBox.DataContext>
    <TextBox.ToolTip>
      <ToolTip Content="{Binding}" ContentStringFormat="{}The answer is: {0}" />
    </TextBox.ToolTip>
  </TextBox>
</StackPanel>

أنا أفضل تركيبًا أكثر بساطة ، شيء مثل ذلك في السؤال الأصلي.




Related



Tags

wpf   binding