से काम करना चाहिए
class StyleConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
FrameworkElement targetElement = values[0] as FrameworkElement;
string styleName = values[1] as string;
if (styleName == null)
return null;
Style newStyle = (Style)targetElement.TryFindResource(styleName);
if (newStyle == null)
newStyle = (Style)targetElement.TryFindResource("MyDefaultStyleName");
return newStyle;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
यह कुछ मैं बहुत बार ऐसा नहीं है, लेकिन हम में से उन लोगों के लिए जो बहु मूल्य कनवर्टर का उपयोग नहीं कर सकता (मैं आपको SL4 और WP7 देख रहा हूं :), स्टीवन के उत्तर के लिए धन्यवाद, मुझे एक सामान्य मूल्य कनवर्टर का उपयोग करने का एक तरीका मिला।
एकमात्र धारणा शैली शैली निर्धारित शैली की संपत्ति के भीतर निहित है।
तो यदि आप एमवीवीएम पैटर्न का उपयोग कर रहे हैं तो शैली मूल्य (जैसे टेक्स्टस्माल, टेक्स्टमेडियम, टेक्स्टलार्ज) को दृश्य मॉडल का हिस्सा माना जाता है, और आपको बस इतना करना है कि नाम परिभाषित कनवर्टर पैरामीटर शैली का
उदाहरण के लिए, आपके विचार मॉडल संपत्ति है:
public string ProjectNameStyle
{
get { return string.Format("ProjectNameStyle{0}", _displaySize.ToString()); }
}
आवेदन शैली:
<Application.Resources>
<Style x:Key="ProjectNameStyleSmall" TargetType="TextBlock">
<Setter Property="FontSize" Value="40" />
</Style>
<Style x:Key="ProjectNameStyleMedium" TargetType="TextBlock">
<Setter Property="FontSize" Value="64" />
</Style>
<Style x:Key="ProjectNameStyleLarge" TargetType="TextBlock">
<Setter Property="FontSize" Value="90" />
</Style>
XAML दृश्य:
<TextBlock
Text="{Binding Name}"
Style="{Binding ., Mode=OneWay, Converter={cv:StyleConverter}, ConverterParameter=ProjectNameStyle}">
अपने StyleConverter वर्ग IValueConverter को लागू करने के साथ
:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (targetType != typeof(Style))
{
throw new InvalidOperationException("The target must be a Style");
}
var styleProperty = parameter as string;
if (value == null || styleProperty == null)
{
return null;
}
string styleValue = value.GetType()
.GetProperty(styleProperty)
.GetValue(value, null)
.ToString();
if (styleValue == null)
{
return null;
}
Style newStyle = (Style)Application.Current.TryFindResource(styleValue);
return newStyle;
}
ध्यान दें कि यह डब्ल्यूपीएफ कोड है, क्योंकि कनवर्टर मार्कअप एक्सटेंशन के साथ-साथ IValueConverter से लिया गया है, लेकिन यदि आप स्थैतिक संसाधन का उपयोग करते हैं और थोड़ा और अधिक काम करते हैं तो TryFindResource विधि नहीं करता है, यह एसएल 4 और WP7 में काम करेगा। टी मौजूद नहीं है।
आशा है कि किसी की मदद करें, और फिर स्टीवन धन्यवाद!
धन्यवाद स्टीव - यह वही किया जो मैं करने की कोशिश कर रहा था :) –
कोई चिंता नहीं। डब्ल्यूपीएफ में सब कुछ के साथ, ऐसा करने के लिए शायद 10 और रास्ते हैं, लेकिन इस तरह से बहुत साफ और "डिजाइनर अनुकूल" लगता है :) –
धन्यवाद! मैं स्ट्रिंगटो स्टाइल कनवर्टर के लिए इन लाइनों के साथ कुछ पता लगाने की कोशिश कर रहा था और इस पर आया जो महान काम करता था। – Rachel