স্ট্রিংফর্ম্যাট সহ ডাব্লুপিএফ বাঁধাই টুলটিপসে কাজ করে না


87

নীচের কোডটিতে একটি সাধারণ বাঁধাই রয়েছে যা মাই টেক্সট ব্লক নামের পাঠ্যব্লকের পাঠ্যকে বাক্য সংযুক্ত করে সঠিক একই বাঁধাই স্বরলিপিটি ব্যবহার করে টেক্সটবক্সের পাঠ্য এবং সরঞ্জামচালিত সম্পত্তিটিতে আবদ্ধ হয়:

<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 এসপি 1 এর সাথে প্রবর্তিত স্ট্রিংফর্ম্যাট সম্পত্তিটিও ব্যবহার করা হয় যা উপরের পাঠ্য সম্পত্তিটির জন্য সূক্ষ্মভাবে কাজ করছে তবে মনে হয় এটি টুলটিপের জন্য ভেঙে গেছে। প্রত্যাশিত ফলাফলটি "এটি: ফু বার" হয় তবে আপনি যখন টেক্সটবক্সের উপরে ঘুরে দেখেন, তখন সরঞ্জামটিপ স্ট্রিং বিন্যাসিত মান নয়, কেবলমাত্র বাঁধার মান প্রদর্শন করে। কোন ধারনা?


4
আমি নীচের প্রস্তাবিত সমাধানগুলির কোনওটিই
26

উত্তর:


156

ডাব্লুপিএফ-এ থাকা সরঞ্জাম টিপসগুলিতে কেবল পাঠ্য নয়, যা কিছু থাকতে পারে তাই আপনি যে বার্তায় কেবল পাঠ্য চান তার জন্য তারা একটি সামগ্রী স্ট্রিংফর্ম্যাট সম্পত্তি সরবরাহ করে। আমি যতদূর জানি আপনার প্রসারিত বাক্য গঠন ব্যবহার করতে হবে:

<TextBox ...>
  <TextBox.ToolTip>
    <ToolTip 
      Content="{Binding ElementName=myTextBlock,Path=Text}"
      ContentStringFormat="{}It is: {0}"
      />
  </TextBox.ToolTip>
</TextBox>

এর মতো নেস্টেড সম্পত্তি থেকে এলিমেন্টনাম সিনট্যাক্স ব্যবহার করে বাইন্ডিংয়ের বৈধতা সম্পর্কে আমি 100% নিশ্চিত নই তবে কন্টেন্টস্ট্রিং ফর্ম্যাট সম্পত্তিটি আপনি যা খুঁজছেন তা is


4
আমি দেখতে পেয়েছি, উইন্ডোজ ফর্মগুলির মতো টুলটিপটি কেবল একটি সরল স্ট্রিং। এবং হ্যাঁ, এই ক্ষেত্রে এলিমেন্টনাম সিনট্যাক্স বাইরের উপাদান অ্যাক্সেস করতে পারে না।
huseyint

9
মনে রাখবেন string} কেবল তখনই প্রয়োজন যখন আপনি স্ট্রিংয়ের শুরুতে {0 place রাখেন, সুতরাং আপনার অন্যান্য xaml মার্কআপগুলি থেকে আলাদা করার প্রয়োজন need
শিমি ওয়েটজ্যান্ডলার

4
মন = ফুঁকছে। আমি কেবল এটি আঘাত করেছি এবং "ওয়াআআত?" এর মতো ছিলাম?

4
এটি সত্যই আমাকে ব্রাস করেছে যে কোনও রূপান্তরকারী নির্দিষ্ট না করা থাকলে স্ট্রিংফর্ম্যাট 'কেবল কাজ করে না'। আমার নিজের স্ট্রিংফর্ম কনভার্টারটি লিখতে হয়েছিল। এমএস আবার বল ফেলে যাচ্ছে ...
গুড্ডর

4
StringFormatTargetTypeস্ট্রিংয়ের ধরণটি কেবল তখনই প্রয়োগ করা হবে । ToolTipবিষয়বস্তু টাইপ হয় object
জোহানেস ওয়ানজিক

22

এটি একটি বাগ হতে পারে। আপনি যখন সরঞ্জামদণ্ডের জন্য সংক্ষিপ্ত বাক্য গঠন ব্যবহার করেন:

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

স্ট্রিংফর্ম্যাটটি উপেক্ষা করা হবে তবে আপনি যখন প্রসারিত বাক্য গঠন ব্যবহার করবেন:

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

এটি প্রত্যাশার মতো কাজ করে।


সবচেয়ে সঠিক উত্তর .. ধন্যবাদ!
আমির মাহদী নাসিরি

5

যেমনটি ম্যাট বলেছিলেন যে টুলটিপটিতে অভ্যন্তরীণ কোনও কিছু থাকতে পারে তাই আপনি আপনার সরঞ্জামের টিপের ভিতরে একটি টেক্সটবক্সকে পাঠাতে পারেন e

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

এমনকি আপনি টুলটিপের অভ্যন্তরে একটি গ্রিড স্ট্যাক করতে পারেন এবং আপনি চাইলে আপনার পাঠ্যকে বিন্যাস করতে পারেন।


3

আপনার কোডটি এর চেয়ে ছোট হতে পারে:

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

স্ট্রিংফর্ম্যাট থেকে ভিন্ন, রূপান্তরকারীদের কখনই উপেক্ষা করা হবে না তা আমরা ব্যবহার করব।

এটিকে স্ট্রিংফর্ম্যাট কনভার্টর.স এ রাখুন :

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();
        }
    }
}

এটি আপনার রিসোর্সড অভিধান.অ্যাক্যামলটিতে রাখুন :

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

যদিও আমি শীর্ষ উত্তরটি পছন্দ করতাম, এলিমেন্টবাইন্ডিং ইস্যুটি আমাকে ছড়িয়ে দিয়েছে। এই উত্তরটি আমার ক্ষেত্রে কাজ করেছিল যেখানে অন্যরা তা করেনি।
রেজিনাল্ড ব্লু

0

এই পরিস্থিতিতে, আপনি আপেক্ষিক বাঁধাই ব্যবহার করতে পারেন:

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

-7

নিম্নলিখিতটি একটি শব্দযুক্ত সমাধান তবে এটি কাজ করে।

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

আমি অনেক সহজ বাক্য গঠন বলতে চাই, আমার মূল প্রশ্নের মতো কিছু।


4
@ শিম্মি: "আরও ভাল" দর্শকের চোখে রয়েছে, এবং আপনার নিজের প্রশ্নটি গৃহীত উত্তর চিহ্নিত করা ঠিক হবে
Andomar

4
@ শিমি আরও খারাপ, তার উত্তরে একটি '42' রসিকতা রয়েছে।

6
@ অ্যান্ডোমার, লোকেরা তাদের ভোট দিয়ে কী সিদ্ধান্ত নেবে, এটি এখানে বিশদ বিবরণ, এটি প্রায় একই উত্তর। আপনার প্রশ্নের উত্তর পিপিএল তৈরি করা তার উত্তরগুলি অনুলিপি করুন এবং এর জন্য খ্যাতি অর্জন করা সম্পূর্ণ ভুল মনোভাব।
শিমি ওয়েটজ্যান্ডলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.