2013-06-04 6 views
9

मैं निम्नलिखित शैली परिभाषाएँ:PasswordBox शैली स्वीकार नही करता

<!-- Border --> 
<Style x:Key="MyControlBorder" TargetType="{x:Type Border}"> 
    <Setter Property="BorderBrush" Value="DarkKhaki" /> 
    <Setter Property="Background" Value="White" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="CornerRadius" Value="10" /> 
</Style> 

<!-- TextBox --> 
<Style x:Key="MyTextBox" TargetType="{x:Type TextBox}"> 
    <Setter Property="Height" Value="30" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBoxBase}"> 
       <Border Name="TextBoxBorder" Style="{StaticResource MyControlBorder}"> 
        <ScrollViewer x:Name="PART_ContentHost"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<!-- PasswordBox --> 
<Style x:Key="MyPasswordBox" TargetType="{x:Type PasswordBox}"> 
    <Setter Property="Height" Value="30" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Control}"> 
       <Border Name="Border" Style="{StaticResource MyControlBorder}"> 
        <ScrollViewer x:Name="PART_ContentHost" /> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

और निम्नलिखित XAML कोड: result

पाठ बॉक्स मान:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <TextBox Grid.Row="0" Style="{StaticResource MyTextBox}" /> 
    <PasswordBox Grid.Row="1" Style="{StaticResource MyPasswordBox}" /> 
</Grid> 

अब मैं इस परिणाम मिल गया शैली सही ढंग से, लेकिन पासवर्डबॉक्स शैली क्यों नहीं मानता है?

+0

आप यह जानने के लिए की तरह [स्नूप] कुछ उपयोग करने की कोशिश (http://snoopwpf.codeplex.com/) है जहां सीमा यह कार्यावधि में से मूल्यों है हो रही है? यह संभव है कि कुछ सीमाओं पर सीमा शैलियों को स्थापित कर रहा हो [निर्भरता संपत्ति प्राथमिकता] (http://msdn.microsoft.com/en-us/library/ms743230.aspx#listing) – Rachel

उत्तर

1

किसी भी तरह BorderControlTemplatePasswordBoxMyControlBorder शैली नहीं लेता है।

जब आप MyPasswordBox इस तरह की शैली को संशोधित करते हैं ... तो यह काम करेगा।

<Style x:Key="MyPasswordBox" TargetType="{x:Type PasswordBox}"> 
<Setter Property="Height" Value="30" /> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Control}"> 
      <Border Name="Border" BorderBrush="DarkKhaki" Background="White" BorderThickness="1" CornerRadius="10"> 
       <ScrollViewer x:Name="PART_ContentHost" /> 
      </Border> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

मैं जानता हूँ कि यह सबसे अच्छा समाधान नहीं है ... लेकिन मैं समझ नहीं क्यों MyControlBorder लागू नहीं होता। यह MyTextBox शैली से छुटकारा पाने पर भी काम नहीं करता है। फिर आप केवल MyControlBorder और MyPasswordBox के साथ ही छोड़े गए हैं ... यह या तो काम नहीं करता है।

2

यदि आप Border को Border में लपेटते हैं तो सबकुछ बस अपेक्षित काम करता है (मुझे नहीं पता क्यों)।

एक बोनस के रूप में, अब आप PasswordBox तों और TextBox es "इनहेरिट" एक ही Style से है, चीजों को अच्छा और सूखा रखने कर सकते हैं।

<!-- Border Style Definition --> 
<Style x:Key="MyControlBorder" TargetType="Border"> 
    <Setter Property="BorderBrush" Value="DarkKhaki" /> 
    <Setter Property="Background" Value="White" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="CornerRadius" Value="10" /> 
</Style> 

<!-- TextBox and PasswordBox Style --> 
<Style x:Key="MyControlInputBox" TargetType="Control"> 
    <Setter Property="Height" Value="30" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Control}"> 
       <Border> 
        <Border Name="Border" Style="{StaticResource MyControlBorder}"> 
         <ScrollViewer x:Name="PART_ContentHost" /> 
        </Border> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<!-- TextBox --> 
<Style x:Key="MyTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource MyControlInputBox}" /> 

<!-- PasswordBox --> 
<Style x:Key="MyPasswordBox" TargetType="{x:Type PasswordBox}" BasedOn="{StaticResource MyControlInputBox}" /> 
+0

सीएसएस भयानक है, xaml इतना शानदार नहीं है: पी – CRice

+0

मैंने '' को MyControlInputBox में भी जोड़ा, अन्यथा कर्सर बहुत अधिक था। – CRice

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