2010-03-26 10 views
6

मैं एक शैली अपने सभी बक्सें, एक संसाधन शब्दकोश में परिभाषित करने के लिए आवेदन किया है पर TargetType द्वारा निर्धारित है ..एक वैश्विक WPF शैली है कि एक ही विशिष्ट नियंत्रण

<Style TargetType="TextBlock"> 
     <Setter Property="TextBlock.FontSize" Value="{Binding Source={StaticResource ApplicationUserSettings}, Path=fontSize, Mode=OneWay}" /> 
     <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
     <Setter Property="TextBlock.VerticalAlignment" Value="Center"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="TextBox.FontFamily" Value="{Binding Source={StaticResource ApplicationUserSettings}, Path=fontName, Mode=OneWay}"/> 
    </Style>\ 

fontsize और fontstyle गुण ओवरराइड नहीं कर सकते एक विशेष उपयोगकर्ता सेटिंग्स वर्ग से बंधे हैं जो iNotifyPropertyChanged लागू करता है, जो फ़ॉन्ट आकार और फ़ॉन्टफैमिली में परिवर्तन को मेरे पूरे एप्लिकेशन में तत्काल प्रचार करने की अनुमति देता है।

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

<UserControl x:Class="ctlUserSettings" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:R2D2" Height="400" Width="600"> 

<Grid> 

    <Grid.Resources> 
     <Style x:Key="tbxStyle" TargetType="TextBox"> 
      <Style.Setters> 
       <Setter Property="FontSize" Value="14"/> 
       <Setter Property="FontFamily" Value="Tahoma"/> 
      </Style.Setters> 
     </Style> 

... आदि ...

  <StackPanel Margin="139,122.943,41,0" Orientation="Horizontal" Height="33" VerticalAlignment="Top"> 
      <TextBox Style="{x:Null}" FontSize="13" FontFamily="Tahoma" HorizontalAlignment="Left" MaxWidth="500" MinWidth="350" Name="txtReaderPath" Height="Auto" VerticalAlignment="Top" /> 
      <TextBox Style="{x:tbxStyle}" Margin="15,0,0,0" HorizontalAlignment="Left" Name="txtPath" Width="43" Height="23" VerticalAlignment="Top">(some text)</Button> 
     </StackPanel> 

मैं सेटिंग की कोशिश की है {X: Null} की शैली, कस्टम फ़ॉन्ट आकार इनलाइन सेट करना, और इस नियंत्रण के संसाधनों में शैली सेट करना। मेरे संसाधन शब्दकोश में शैलियों पर कोई भी प्राथमिकता नहीं लेता है।

आप देख सकते हैं, मैं सब बातों मैं ऊपर XAML नमूने में कोशिश की है की एक छिड़काव दिखाने ...

मैं क्या याद आ रही है?

उत्तर

1

ठीक है, मैं देख रहा हूं कि अब क्या हो रहा है।

मेरे उपयोगकर्ता नियंत्रण के लिए निर्माता में, मैंने सेटिंग भी करने की कोशिश की। स्टाइल = कुछ भी नहीं, सिर्फ यह देखने के लिए कि क्या होगा ... और मेरी वैश्विक शैली अभी भी साथ आ रही है और खुद को लागू कर रही है।

मुझे यह मानना ​​है कि रचनाकार चलाने के बाद वैश्विक नियंत्रण मेरे नियंत्रणों पर लागू किया जा रहा है, और इस तरह की वैश्विक शैली वैसे भी घुसपैठ करती है। अंत में, मैंने बस 'वैश्विक' शैली को उस स्थान पर ले जाया है जहां यह केवल उस चीज़ को प्रभावित करेगा जिसकी मुझे आवश्यकता है।

कम सुविधाजनक है, लेकिन कम से कम मैं अपने प्रोजेक्ट में पर जा सकते हैं

1

एक अन्य विकल्प जैसे UserControl पर एक खाली शैली को जोड़ने के लिए है:

<UserControl.Resources> 
     <Style TargetType="TextBlock" /> 
</UserControl.Resources> 

कि ब्लॉक वैश्विक शैली - भी कर सकते हैं महीन कणों का नियंत्रण

  • अधिक समय के लिए StackPanel संसाधनों के लिए इसे जोड़ने exmplanation here
संबंधित मुद्दे