Wpf样式应用于设计器但不在运行时应用

时间:2013-04-06 16:53:37

标签: .net wpf

我有三个xaml文件。

  1. Button.xaml(按钮样式)
  2. Default.xaml(主题文件)(包括按钮的合并资源文件)
  3. MainWindo.xaml(使用default.xaml资源字典)。
  4. 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>
    

    上面的窗口按钮样式在设计时应用,但运行时它会重置为默认状态。

1 个答案:

答案 0 :(得分:0)

因为我看到你有

rootdirectory \ controls \ button.xaml

rootdirectory \主题\默认\ default.xaml

rootdirectory \ mainwindow.xaml

所以这是事物

在default.xaml中,您必须转到后面的目录才能像这样访问您的按钮控件

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