2010-03-03 19 views
5

उपसर्गों के लिए अलग-अलग नियंत्रणों का उपयोग किये बिना मैं स्टैकपैनल में टेक्स्टब्लॉक नियंत्रण में बाध्य मानों को कैसे पूर्ववत कर सकता हूं?सरल WPF प्रारूपण प्रश्न

उदाहरण के लिए, मान लें कि मेरे पास एक संवाद है जो पुस्तकों की एक सूची प्रदर्शित करने के लिए ट्री व्यू का उपयोग करता है, शीर्षक के शीर्ष नोड्स के साथ, और अन्य पुस्तक विशेषताओं (आईएसबीएन, लेखक इत्यादि) के लिए अधीनस्थ नोड्स का एक सेट है। ।

मेरे पास बाध्यकारी सही ढंग से काम कर रहा है, लेकिन मेरा उपयोगकर्ता पुस्तक विशेषताएँ सूची को लंबवत रूप से ढेर करना चाहता है, और जाहिर है, वह चाहता है कि प्रत्येक विशेषता नोड को मूल्य से पहले एक वर्णनात्मक उपसर्ग (उदाहरण के लिए, "लेखक: एरिच गामा" बस "एरिच गामा")। मेरे एचडीटी और डीटी तत्वों के अंदर, मैं मान प्रदर्शित करने के लिए एक स्टैकपैनल और टेक्स्टब्लॉक नियंत्रण का उपयोग कर रहा हूं।

मैं प्रत्येक विशेषता

<!-- Works, but requires 2 controls to display the book author and the prefix stacks above the author --> 
<TextBlock Text="Author: "/><TextBlock Text="{Binding Path=Author}" /> 

या वहाँ प्रत्येक नोड के लिए एक एकल TextBlock नियंत्रण के साथ यह करने के लिए एक तरीका है के उपसर्ग के लिए एक अलग TextBlock नियंत्रण का उपयोग करना चाहिए?

<!-- only one control, but doesn't work --> 
<TextBlock Text="Author: {Binding Path=Author}" /> 

मैं जानता हूँ कि यह एक आम मुद्दा होना चाहिए, और मैं इसके लिए Google पर और तीन WPF किताबें मैं में खोज की, लेकिन मुझे लगता है मैं के लिए खोज करने के लिए सही तरीके से पता नहीं है कि मैं क्या कोशिश कर रहा हूँ कहना।

धन्यवाद!

उत्तर

6

आप नेट 3.5 एसपी 1 है, तो आप आसानी से StringFormat

के माध्यम से इस हासिल कर सकते हैं
<TextBlock Text="{Binding Path=Title, StringFormat= Title: {0}}" /> 

इस

<TextBlock> 
    <TextBlock.Text> 
    <MultiBinding StringFormat="Author: {0}, Title: {1}"> 
     <Binding Path="Author"/> 
     <Binding Path="Title"/> 
    </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

आप SP1 का उपयोग नहीं कर रहे हैं, तो तो आप उपयोग कर सकते कर सकते हैं एक वैल्यू कनवर्टर

+0

आपकी विधि मेरे मुकाबले क्लीनर है :) – slugster

+0

हाँ..लेकिन, यह सुविधा केवल 3.5SP1 – SysAdmin

+0

+1 से मौजूद है, लेकिन बाध्यकारी विफल होने या –

2

त्वरित गंदा और सरल विधि: एक कनवर्टर का उपयोग करें, और कनवर्टर पैरामीटर के रूप में उपसर्ग टेक्स्ट पास करें। फिर कनवर्टर में आप जो भी करते हैं वह कनवर्टर पैरामीटर टेक्स्ट को बाइंडिंग टेक्स्ट पर प्रीपेड करता है।

<TextBlock Text="{Binding Path=Title, Converter={StaticResource MyTextConverter}, ConverterParameter=Title}" /> 
<TextBlock Text="{Binding Path=ISBNNumber, Converter={StaticResource MyTextConverter}, ConverterParameter=ISBN}" /> 
<TextBlock Text="{Binding Path=AuthorName, Converter={StaticResource MyTextConverter}, ConverterParameter=Author}" /> 

public class MyTextConverter : IValueConverter 
{ 

    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is string) 
     { 
      return string.Format("{0}{1}{2}", parameter ?? "", !string.IsNullOrEmpty(parameter) ? " : " : "", value); 
     } 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

यह सीधे मेरे सिर के शीर्ष पर था, इसमें किसी भी छोटी त्रुटियों का बहाना था। यह सिर्फ एक टेक्स्टब्लॉक का उपयोग करके किया जाता है। आपको बस इतना करना है कि xaml फ़ाइल के स्थिर संसाधनों में कनवर्टर शामिल करें।

+0

ग्रेट सुझाव। मुझे संदेह है कि मुझे ऐसा कुछ और परिष्कृत करने के लिए करना होगा जो मैं वर्तमान में कर रहा हूं। धन्यवाद! –

संबंधित मुद्दे