2011-12-05 9 views
10

मेरे पास एप्लिकेशन में बहुत सारे पॉपअप हैं (.NET Framework 4, WPF) और मुझे उन सभी को एक शैली सेट करनी है। उदाहरण पॉपअप कि तरह लग रहा है:पॉपअप नियंत्रण के लिए स्टाइल टेम्पलेट कैसे लिखें?

<Popup PopupAnimation="Fade" MinWidth="600" MinHeight="200" Placement="Center" VerticalAlignment="Center" HorizontalAlignment="Center" IsEnabled="True" IsOpen="False"> 
    <Grid Width="Auto" Height="Auto" Background="Gray"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="30"/>     
      <RowDefinition Height="Auto"/>   
     </Grid.RowDefinitions> 
     <Border BorderThickness="2" CornerRadius="8" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.RowSpan="2"> 
      <Border.BorderBrush> 
       <SolidColorBrush Color="Gray"/> 
      </Border.BorderBrush> 
      <Border.Background> 
       <SolidColorBrush Color="White"/> 
      </Border.Background> 
     </Border> 

     <StackPanel Grid.Row="0"> 
      <Label Foreground="Blue" Content="Popup_Title"/> 
     </StackPanel> 

     <GroupBox Grid.Row="1" Header="Popup example content"> 
      <StackPanel>      
        ...       
      </StackPanel> 
     </GroupBox>  
    </Grid> 
</Popup> 

मैं कैसे शैली टेम्पलेट के लिए सीमाओं और पृष्ठभूमि की तरह शैलियों ले जा सकते हैं? मैं टार्गेट टाइप पॉपअप के साथ स्टाइल नहीं लिख सकता और इसे Property="Template" संशोधित कर सकता हूं क्योंकि पॉपअप कंट्रोल में Property="Template" नहीं है। तो मैं उन पॉपअप को शैली कैसे लिख सकता हूं?

संपादित करें: सटीक काम कर रहे शैली:

<Style x:Key="PopupContentStyle" TargetType="ContentControl"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ContentControl"> 
       <Grid Width="Auto" Height="Auto" Background="Gray"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="30"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <Border BorderThickness="2" CornerRadius="8" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.RowSpan="2"> 
         <Border.BorderBrush> 
          <SolidColorBrush Color="Gray"/> 
         </Border.BorderBrush> 
         <Border.Background> 
          <SolidColorBrush Color="White"/> 
         </Border.Background> 
        </Border> 

        <StackPanel Grid.Row="0"> 
         <Label Foreground="Blue" Content="Popup_Title"/> 
        </StackPanel> 

        <GroupBox Grid.Row="1" Header="Popup example content"> 
         <StackPanel> 
          <ContentPresenter /> 
         </StackPanel> 
        </GroupBox> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

उत्तर

22

मैं एक ContentControl या एक HeaderedContentControl की तरह कुछ में अपने पॉपअप के सामग्री लपेटकर और कि

<Popup> 
    <ContentControl Style="{StaticResource PopupContentStyle}"> 
     ... 
    </ContentControl> 
</Popup> 

उदाहरण की शैली स्थापित करने की सलाह देते हैं शैली ...

<Style x:Key="PopupContentStyle" TargetType="{x:Type ContentControl}"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 

       <Grid Width="Auto" Height="Auto" Background="Gray"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="30"/>     
         <RowDefinition Height="Auto"/>   
        </Grid.RowDefinitions> 
        <Border BorderThickness="2" CornerRadius="8" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.RowSpan="2"> 
         <Border.BorderBrush> 
          <SolidColorBrush Color="Gray"/> 
         </Border.BorderBrush> 
         <Border.Background> 
          <SolidColorBrush Color="White"/> 
         </Border.Background> 
        </Border> 

        <StackPanel Grid.Row="0"> 
         <Label Foreground="Blue" Content="Popup_Title"/> 
        </StackPanel> 

        <GroupBox Grid.Row="1" Header="Popup example content"> 
         <StackPanel>      
           <ContentPresenter />       
         </StackPanel> 
        </GroupBox>  
       </Grid> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+2

मुझे इस समाधान को काम करने के लिए कुछ बदलाव जोड़ना पड़ा, लेकिन यह विचार बिल्कुल वही था जो मुझे चाहिए। आपका बहुत बहुत धन्यवाद! – Marta

+2

मुझे इस तरह सामग्री प्रदाता को परिभाषित करना पड़ा, क्योंकि अन्यथा यह समाधान काम करने में विफल रहा। लेकिन विचार खुद ही है जो मुझे चाहिए - धन्यवाद भी! <सामग्री प्रस्तुतकर्ता सामग्री = "{टेम्पलेट बाइंडिंग सामग्री नियंत्रण। सामग्री}" /> –

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