2011-04-26 83 views
2

使用Silverlight 4,我們似乎無法讓Childwindows'顯示我們的隱式樣式。在我們的應用程序的每個其他控件會隱含的風格,但childwindowSilverlight Childwindow +隱式樣式不工作

(我們使用的工具包樣式)(甚至在childwindow的控制採取了含蓄的風格)

<!--ChildWindow--> 
<Style TargetType="controls:ChildWindow"> 
    <Setter Property="IsTabStop" Value="false"/> 
    <Setter Property="TabNavigation" Value="Cycle"/> 
    <Setter Property="HorizontalAlignment" Value="Center"/> 
    <Setter Property="VerticalAlignment" Value="Center"/> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#FFA3AEB9" Offset="0"/> 
       <GradientStop Color="#FF8399A9" Offset="0.375"/> 
       <GradientStop Color="#FF718597" Offset="0.375"/> 
       <GradientStop Color="#FF617584" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="OverlayBrush" Value="#7F000000"/> 
    <Setter Property="OverlayOpacity" Value="1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="controls:ChildWindow"> 
       <Grid x:Name="Root"> 
        <Grid.Resources> 
         <Style x:Key="CloseButtonStyle" TargetType="Button"> 
          <Setter Property="Background" Value="#FF1F3B53"/> 
          <Setter Property="Foreground" Value="#FF000000"/> 
          <Setter Property="Padding" Value="3"/> 
          <Setter Property="BorderThickness" Value="1"/> 
          <Setter Property="BorderBrush"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#FFA3AEB9" Offset="0"/> 
             <GradientStop Color="#FF8399A9" Offset="0.375"/> 
             <GradientStop Color="#FF718597" Offset="0.375"/> 
             <GradientStop Color="#FF617584" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="Button"> 
             <Grid x:Name="grid" Height="14" HorizontalAlignment="Center" VerticalAlignment="Center" Width="15" Background="#02FFFFFF"> 
              <VisualStateManager.VisualStateGroups> 
               <VisualStateGroup x:Name="CommonStates"> 
                <VisualState x:Name="Normal"/> 
                <VisualState x:Name="MouseOver"> 
                 <Storyboard> 
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="X_Fuzz2" Storyboard.TargetProperty="Visibility"> 
                   <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> 
                  </ObjectAnimationUsingKeyFrames> 
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="X_Fuzz1" Storyboard.TargetProperty="Visibility"> 
                   <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> 
                  </ObjectAnimationUsingKeyFrames> 
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="X_Fuzz0" Storyboard.TargetProperty="Visibility"> 
                   <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> 
                  </ObjectAnimationUsingKeyFrames> 
                  <DoubleAnimation Duration="0" Storyboard.TargetName="X" Storyboard.TargetProperty="Opacity" To="0.95"/> 
                 </Storyboard> 
                </VisualState> 
                <VisualState x:Name="Pressed"> 
                 <Storyboard> 
                  <DoubleAnimation Duration="0" Storyboard.TargetName="X" Storyboard.TargetProperty="Opacity" To="0.85"/> 
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="X_Fuzz2" Storyboard.TargetProperty="Visibility"> 
                   <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> 
                  </ObjectAnimationUsingKeyFrames> 
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="X_Fuzz1" Storyboard.TargetProperty="Visibility"> 
                   <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> 
                  </ObjectAnimationUsingKeyFrames> 
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="X_Fuzz0" Storyboard.TargetProperty="Visibility"> 
                   <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> 
                  </ObjectAnimationUsingKeyFrames> 
                 </Storyboard> 
                </VisualState> 
                <VisualState x:Name="Disabled"> 
                 <Storyboard> 
                  <DoubleAnimation Duration="0" Storyboard.TargetName="X" Storyboard.TargetProperty="Opacity" To="0.5"/> 
                 </Storyboard> 
                </VisualState> 
               </VisualStateGroup> 
              </VisualStateManager.VisualStateGroups> 
              <Path x:Name="X_Fuzz2" Fill="#14C51900" Stretch="Fill" Stroke="#14C51900" Height="8" HorizontalAlignment="Center" Margin="0,-1,0,0" VerticalAlignment="Center" Width="9" Opacity="1" RenderTransformOrigin="0.5,0.5" Visibility="Collapsed" Data="F1 M 6.742676,3.852539 L 9.110840,1.559570 L 8.910645,0.500000 L 6.838379,0.500000 L 4.902832,2.435547 L 2.967285,0.500000 L 0.895020,0.500000 L 0.694824,1.559570 L 3.062988,3.852539 L 0.527832,6.351563 L 0.689941,7.600586 L 2.967285,7.600586 L 4.897949,5.575195 L 6.854004,7.600586 L 9.115723,7.600586 L 9.277832,6.351563 L 6.742676,3.852539 Z"> 
               <Path.RenderTransform> 
                <TransformGroup> 
                 <ScaleTransform ScaleX="1.3" ScaleY="1.3"/> 
                </TransformGroup> 
               </Path.RenderTransform> 
              </Path> 
              <Path x:Name="X_Fuzz1" Fill="#1EC51900" Stretch="Fill" Stroke="#1EC51900" Height="8" HorizontalAlignment="Center" Margin="0,-1,0,0" VerticalAlignment="Center" Width="9" Opacity="1" RenderTransformOrigin="0.5,0.5" Visibility="Collapsed" Data="F1 M 6.742676,3.852539 L 9.110840,1.559570 L 8.910645,0.500000 L 6.838379,0.500000 L 4.902832,2.435547 L 2.967285,0.500000 L 0.895020,0.500000 L 0.694824,1.559570 L 3.062988,3.852539 L 0.527832,6.351563 L 0.689941,7.600586 L 2.967285,7.600586 L 4.897949,5.575195 L 6.854004,7.600586 L 9.115723,7.600586 L 9.277832,6.351563 L 6.742676,3.852539 Z"> 
               <Path.RenderTransform> 
                <TransformGroup> 
                 <ScaleTransform ScaleX="1.1" ScaleY="1.1"/> 
                </TransformGroup> 
               </Path.RenderTransform> 
              </Path> 
              <Path x:Name="X_Fuzz0" Fill="#FFC51900" Stretch="Fill" Stroke="#FFC51900" Height="8" HorizontalAlignment="Center" Margin="0,-1,0,0" VerticalAlignment="Center" Width="9" Opacity="1" Visibility="Collapsed" Data="F1 M 6.742676,3.852539 L 9.110840,1.559570 L 8.910645,0.500000 L 6.838379,0.500000 L 4.902832,2.435547 L 2.967285,0.500000 L 0.895020,0.500000 L 0.694824,1.559570 L 3.062988,3.852539 L 0.527832,6.351563 L 0.689941,7.600586 L 2.967285,7.600586 L 4.897949,5.575195 L 6.854004,7.600586 L 9.115723,7.600586 L 9.277832,6.351563 L 6.742676,3.852539 Z"/> 
              <Path x:Name="X" Fill="#FFFFFFFF" Stretch="Fill" Height="8" HorizontalAlignment="Center" Margin="0,-1,0,0" VerticalAlignment="Center" Width="9" Opacity="0.7" Data="F1 M 6.742676,3.852539 L 9.110840,1.559570 L 8.910645,0.500000 L 6.838379,0.500000 L 4.902832,2.435547 L 2.967285,0.500000 L 0.895020,0.500000 L 0.694824,1.559570 L 3.062988,3.852539 L 0.527832,6.351563 L 0.689941,7.600586 L 2.967285,7.600586 L 4.897949,5.575195 L 6.854004,7.600586 L 9.115723,7.600586 L 9.277832,6.351563 L 6.742676,3.852539 Z"> 
               <Path.Stroke> 
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
                 <GradientStop Color="#FF313131" Offset="1"/> 
                 <GradientStop Color="#FF8E9092" Offset="0"/> 
                </LinearGradientBrush> 
               </Path.Stroke> 
              </Path> 
             </Grid> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </Grid.Resources> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="WindowStates"> 
          <VisualState x:Name="Open"> 
           <Storyboard> 
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="Overlay" Storyboard.TargetProperty="Opacity"> 
             <EasingDoubleKeyFrame KeyTime="0" Value="0"/> 
             <EasingDoubleKeyFrame KeyTime="00:00:00.3" Value="1"/> 
            </DoubleAnimationUsingKeyFrames> 
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(RenderTransform).(Children)[0].ScaleX"> 
             <SplineDoubleKeyFrame KeyTime="0" Value="0"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="0"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.4" Value="1"/> 
             <SplineDoubleKeyFrame KeySpline="0,0,0.5,1" KeyTime="00:00:00.45" Value="1.05"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.55" Value="1"/> 
            </DoubleAnimationUsingKeyFrames> 
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(RenderTransform).(Children)[0].ScaleY"> 
             <SplineDoubleKeyFrame KeyTime="0" Value="0"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="0"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.4" Value="1"/> 
             <SplineDoubleKeyFrame KeySpline="0,0,0.5,1" KeyTime="00:00:00.45" Value="1.05"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.55" Value="1"/> 
            </DoubleAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Closed"> 
           <Storyboard> 
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="Overlay" Storyboard.TargetProperty="Opacity"> 
             <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
             <EasingDoubleKeyFrame KeyTime="00:00:00.3" Value="0"/> 
            </DoubleAnimationUsingKeyFrames> 
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(RenderTransform).(Children)[0].ScaleX"> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="1.05"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.45" Value="0"/> 
            </DoubleAnimationUsingKeyFrames> 
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(RenderTransform).(Children)[0].ScaleY"> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="1.05"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.45" Value="0"/> 
            </DoubleAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid x:Name="Overlay" HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Top" Opacity="{TemplateBinding OverlayOpacity}" Background="{TemplateBinding OverlayBrush}"/> 
        <Grid x:Name="ContentRoot" Height="{TemplateBinding Height}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}" Width="{TemplateBinding Width}" RenderTransformOrigin="0.5,0.5"> 
         <Grid.RenderTransform> 
          <TransformGroup> 
           <ScaleTransform/> 
           <SkewTransform/> 
           <RotateTransform/> 
           <TranslateTransform/> 
          </TransformGroup> 
         </Grid.RenderTransform> 
         <Border HorizontalAlignment="Stretch" Margin="-1" VerticalAlignment="Stretch" Background="#14000000" BorderBrush="#14000000" BorderThickness="1" CornerRadius="2"/> 
         <Border HorizontalAlignment="Stretch" Margin="-2" VerticalAlignment="Stretch" Background="#0F000000" BorderBrush="#0F000000" BorderThickness="1" CornerRadius="2.25"/> 
         <Border HorizontalAlignment="Stretch" Margin="-3" VerticalAlignment="Stretch" Background="#0C000000" BorderBrush="#0C000000" BorderThickness="1" CornerRadius="2.5"/> 
         <Border HorizontalAlignment="Stretch" Margin="-4" VerticalAlignment="Stretch" Background="#0A000000" BorderBrush="#0A000000" BorderThickness="1" CornerRadius="2.75"/> 
         <Border BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"> 
          <Border.Background> 
           <SolidColorBrush Color="#FF262626"/> 
          </Border.Background> 
          <Border Margin="1" CornerRadius="1.5"> 
           <Border.Background> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="{StaticResource ExpressionBottomGradientBrush2}" Offset="1"/> 
             <GradientStop Color="{StaticResource ExpressionBottomGradientBrush4}" Offset="0"/> 
            </LinearGradientBrush> 
           </Border.Background> 
           <Grid> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition/> 
            </Grid.RowDefinitions> 
            <Border x:Name="Chrome" Width="Auto" BorderThickness="0,0,0,1"> 
             <Border.BorderBrush> 
              <SolidColorBrush Color="{StaticResource ExpressionBottomGradientBrush1}"/> 
             </Border.BorderBrush> 
             <Border.Background> 
              <LinearGradientBrush EndPoint="0.5,0.527999997138977" StartPoint="0.5,0"> 
               <GradientStop Color="{StaticResource ExpressionBottomGradientBrush1}" Offset="1"/> 
               <GradientStop Color="{StaticResource ExpressionBottomGradientBrush2}" Offset="0"/> 
               <GradientStop Color="{StaticResource ExpressionBottomGradientBrush2}" Offset="0.356"/> 
              </LinearGradientBrush> 
             </Border.Background> 
             <Grid Height="Auto" Width="Auto"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition/> 
               <ColumnDefinition Width="30"/> 
              </Grid.ColumnDefinitions> 
              <ContentControl FontWeight="Bold" IsTabStop="False" HorizontalAlignment="Stretch" Margin="6,0,6,0" VerticalAlignment="Center" Content="{TemplateBinding Title}"> 
               <ContentControl.Foreground> 
                <SolidColorBrush Color="{StaticResource TextColor}"/> 
               </ContentControl.Foreground> 
              </ContentControl> 
              <Button x:Name="CloseButton" IsTabStop="False" Height="14" HorizontalAlignment="Center" Style="{StaticResource CloseButtonStyle}" VerticalAlignment="Center" Width="15" Grid.Column="1"/> 
             </Grid> 
            </Border> 
            <Border Margin="7" Grid.Row="1" Background="{TemplateBinding Background}"> 
             <ContentPresenter x:Name="ContentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/> 
            </Border> 
           </Grid> 
          </Border> 
         </Border> 
        </Grid> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

..這裏是正在使用xaml。

<controls:ChildWindow x:Class="CommonModule.Views.OptionsWindowView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:commands="clr-namespace:Microsoft.Practices.Prism.Commands;assembly=Microsoft.Practices.Prism" 
     xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
     xmlns:regions="clr-namespace:Microsoft.Practices.Prism.Regions;assembly=Microsoft.Practices.Prism" 
     Width="400" Height="300" 
     Title="Options" 
     HasCloseButton="False"> 
<Grid x:Name="LayoutRoot" Margin="2"> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <controls:TabControl BorderThickness="5" 
         x:Name="OptionsTabRegion" 
         regions:RegionManager.RegionName="OptionsTabRegion"> 
     <regions:TabControlRegionAdapter.ItemContainerStyle> 
      <Style BasedOn="{StaticResource TabItemStyle}" TargetType="controls:TabItem"> 
       <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
         <DataTemplate> 
          <TextBlock Text="{Binding Title}" /> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </regions:TabControlRegionAdapter.ItemContainerStyle> 
    </controls:TabControl> 

    <Button x:Name="CancelButton" Content="Cancel" commands:Click.Command="{Binding CancelCommand}" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1"/> 
    <Button x:Name="OKButton" Content="OK" commands:Click.Command="{Binding OkCommand}" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" /> 
</Grid> 

+0

你可以發佈你的子窗口隱式樣式嗎? – 2011-04-27 01:31:32

+0

當然,這裏是:) – CraigF 2011-04-27 14:47:58

回答

0
Color="{StaticResource ExpressionBottomGradientBrush2}" 

請注意,如果ExpressionBottomGradientBrush2被定義爲System.Windows.Media.SolidColorBrush,你不能將其設置爲System.Windows.Media.Color。

如果您的子窗口的風格有任何錯誤,它只是不適用,我想這就是您無法看到它的原因。 :)

+0

好的眼睛,但那個畫筆實際上是一種顏色(直接從工具包中) – CraigF 2011-04-28 14:44:04

+0

這個工具箱風格到底是什麼?你使用哪個主題? – 2011-04-28 23:36:18

+0

Expression Dark http://silverlight.codeplex.com/wikipage?title=Silverlight%20Toolkit%20Overview%20Part%203 – CraigF 2011-04-29 12:47:33

1

這似乎是Silverlight 4的一個問題,因爲默認樣式鍵未設置爲typeof(ChildWindow)

無論是繼承「ChildWindow」,並在構造自己的類設置如下:

DefaultStyleKey = typeof(MyChildWindow);

或者通過創建一個「鑰匙」使用一個明確的風格和應用該樣式鍵上childwindow控制。