简体   繁体   English

WPF样式适用于设计器,但不适用于运行时

[英]Wpf style applying in designer but not applying at runtime

I have three xaml files. 我有三个xaml文件。

  1. Button.xaml (Button style) Button.xaml(按钮样式)
  2. Default.xaml (Theme file) (Includes Merges Resource file of the button) Default.xaml(主题文件)(包括按钮的合并资源文件)
  3. MainWindo.xaml (Uses default.xaml resource dictionary). MainWindo.xaml(使用default.xaml资源字典)。

Button.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: 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: 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>

Here in above window button style is applied at design time but runtime it resets to default state. 上面的窗口按钮样式在设计时应用,但在运行时它将重置为默认状态。

as i see you have 如我所见

rootdirectory\\controls\\button.xaml 根目录\\ controls \\ button.xaml

rootdirectory\\themes\\default\\default.xaml 根目录\\主题\\默认\\ default.xaml

rootdirectory\\mainwindow.xaml 根目录\\ mainwindow.xaml

so here is thing 所以这是东西

in default.xaml you have to go to directories behind to access the your button control like this 在default.xaml中,您必须转到后面的目录才能像这样访问按钮控件

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM