2013-04-06 30 views
2

我有三個xaml文件。Wpf風格適用於設計師,但不適用於運行時

  1. Button.xaml(按鈕樣式)
  2. Default.xaml(主題文件)(包括按鈕梅傑斯資源文件)
  3. MainWindo.xaml(使用default.xaml資源字典)。

Button.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<ControlTemplate x:Key="ButtonControlTemplate" TargetType="Button"> 
    <Border Name="Back" > 
     <Border.Background> 
      <ImageBrush ImageSource="..\Images\ButtonBackground.png" /> 
     </Border.Background> 
     <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" /> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter TargetName="Back" Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect ShadowDepth="0" Direction="0"    
              BlurRadius="15"Color="#D3F80A" Opacity="1"/> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template" Value="{StaticResource ButtonControlTemplate}" /> 
</Style> 

</ResourceDictionary> 

Default.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:primatives="clr-namespace:System.Windows.Controls;assembly=PresentationFramework"> 

    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Controls\Button.xaml"></ResourceDictionary> 
    </ResourceDictionary.MergedDictionaries> 

</ResourceDictionary> 

MainWindow.xaml:

<Window x:Class="RemoteDesktop.GUI.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="375" Width="195" WindowStyle="None" Topmost="True" AllowsTransparency="True" Background="Transparent" WindowStartupLocation="CenterScreen" ResizeMode="NoResize" 
     TextOptions.TextFormattingMode="Ideal" 
     > 
    <Window.Resources> 

     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source=".\Themes\Default\Default.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 


     </ResourceDictionary> 


    </Window.Resources> 

    <Border x:Name="border" Margin="10" CornerRadius="10,10,10,10" BorderBrush="#111111" BorderThickness="0"> 
     <Border.Background> 
      <ImageBrush ImageSource=".\Resources\Background.png" Stretch="Fill" /> 
     </Border.Background> 
     <Border.Effect> 
      <DropShadowEffect ShadowDepth="0" Direction="0" BlurRadius="15" Color="Black" Opacity="1"/> 
     </Border.Effect> 
     <Grid > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition ></ColumnDefinition> 
       <ColumnDefinition Width="58" ></ColumnDefinition> 
       <ColumnDefinition Width="10" ></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="33" /> 
       <RowDefinition Height="15"/> 
       <RowDefinition Height="33" /> 
       <RowDefinition Height="15"/> 
       <RowDefinition Height="33"/> 
       <RowDefinition Height="23"/> 
       <RowDefinition Height="33"/> 
      </Grid.RowDefinitions> 
      <Border Background="Transparent" Name="titleBorder" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" MouseLeftButtonDown="titleBorder_MouseLeftButtonDown"> 
       <Label Foreground="LightGray" TextOptions.TextHintingMode="Animated" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center" >Please Log In</Label> 
      </Border> 
      <TextBox Grid.Row="2" Grid.Column="0" Width="148" Height="32" Grid.ColumnSpan="3" > 
       Email 
      </TextBox> 
      <TextBox Grid.Row="4" Grid.Column="0" Width="148" Height="32" Grid.ColumnSpan="3" > 
       Password 
      </TextBox> 
      <Button Name="btn" Grid.Row="6" Grid.Column="1" BorderThickness="0" Foreground="#232323" Content="Sign In" TextOptions.TextHintingMode="Animated" BorderBrush="{x:Null}" > 

       <!--<Button.Style> 
        <Style TargetType="Button"> 

         <Setter Property="OverridesDefaultStyle" Value="True"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type Button}"> 
            <Border Name="Back" > 
             <Border.Background> 
              <ImageBrush ImageSource=".\Resources\ButtonBackground.png" /> 
             </Border.Background> 
             <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" ></TextBlock> 
            </Border> 
            <ControlTemplate.Triggers> 
             <Trigger Property="IsMouseOver" Value="True"> 
              <Setter TargetName="Back" Property="Effect"> 
               <Setter.Value> 
                <DropShadowEffect ShadowDepth="0" Direction="0" BlurRadius="15" Color="#D3F80A" Opacity="1"/> 
               </Setter.Value> 
              </Setter> 
             </Trigger> 
            </ControlTemplate.Triggers> 
           </ControlTemplate> 

          </Setter.Value> 
         </Setter> 


        </Style> 
       </Button.Style>--> 

      </Button> 
     </Grid> 
    </Border> 
</Window> 

在上面的窗口按鈕樣式在設計時應用,但運行時會重置爲默認狀態。

+0

Snoop(https://snoopwpf.codeplex.com)告訴你哪些按鈕的模板來自哪裏? – briantyler 2017-09-21 03:14:19

回答

0

,我看你有沒有

rootdirectory \控件\ button.xaml

rootdirectory \主題\默認\ default.xaml

rootdirectory \ mainwindow.xaml

所以這裏是東西

在default.xaml你必須去後面的目錄訪問你的按鈕控件像這樣

<ResourceDictionary Source="..\..\Controls\Button.xaml"></ResourceDictionary> 
+0

不要忘記清理項目 – 2013-04-06 18:31:03

相關問題