Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 不同的Windows XP风格正在改变我的控件外观,我如何避免它?_.net_Wpf_Xaml - Fatal编程技术网

.net 不同的Windows XP风格正在改变我的控件外观,我如何避免它?

.net 不同的Windows XP风格正在改变我的控件外观,我如何避免它?,.net,wpf,xaml,.net,Wpf,Xaml,我认为我的用户控件、样式和布局等一切都很好,直到我发布了一个供用户测试的版本。他们询问勾选时切换按钮是否为绿色。我说是的,但不是。我检查了我的机器,它是绿色的。结果发现他和我有一套不同的Windows XP风格。也就是说,他有“Windows经典风格” 如何避免这种情况,并在不考虑Windows样式的情况下强制使用我的样式 <UserControl.Resources> <Style x:Key="MyToggStyle" TargetType="{x:Type Tog

我认为我的用户控件、样式和布局等一切都很好,直到我发布了一个供用户测试的版本。他们询问勾选时切换按钮是否为绿色。我说是的,但不是。我检查了我的机器,它是绿色的。结果发现他和我有一套不同的Windows XP风格。也就是说,他有“Windows经典风格”

如何避免这种情况,并在不考虑Windows样式的情况下强制使用我的样式

<UserControl.Resources>
    <Style x:Key="MyToggStyle" TargetType="{x:Type ToggleButton}">
        <Setter Property="Content" Value="On" />
        <Setter Property="IsChecked" Value="True" />
        <Setter Property="Background" Value="Green" />
        <Style.Triggers>
            <Trigger Property="IsChecked" Value="False">
                <Setter Property="Content" Value="Pff" />
                <Setter Property="Background" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
    <ToggleButton FontWeight="Bold" 
                  IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"
                  Style="{StaticResource MyToggStyle}"/>
</Grid>

使用第三方UI控件将有助于保持一致性

我是用控件做的。他们有一个很好的蒙皮功能

我个人不喜欢不尊重操作系统外观设置的应用程序


不要忘记,使用标准的.NETUI控件将允许您利用新的操作系统功能。例如,在Windows XP、Windows Vista和Windows 7上尝试使用标准ProgressBar控件的应用程序。

您必须完全覆盖控件模板,因为默认的chrome使用操作系统设置

这在Expression Blend中比在Visual Studio中更容易实现

以下是
切换按钮的默认模板的简化版本:

<Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Background" Value="White"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" RenderDefaulted="{TemplateBinding Button.IsDefaulted}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/>
                        </Microsoft_Windows_Themes:ButtonChrome>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="#ADADAD"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

请注意,该控件使用了
Microsoft\u Windows\u主题:ButtonChrome
。如果您删除或替换了该chrome,您的用户显示应该与您自己的相匹配(但不要删除
ContentPresenter
,这就是按钮文本/内容的位置)。如果你把它取下来,你会有一个扁平的按钮。您可以为其创建视觉状态和动画,但同样,在“混合”中这要容易得多

注意:
Microsoft\u Windows\u Themes
在本例中别名为
xmlns:Microsoft\u Windows\u Themes=“clr namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero”

是的,我同意,我想如果与操作系统相同的话,会让它更熟悉。但是,用户在选中按钮时要求按钮为绿色,我不想让他们更改操作系统设置。然后选择具有自己渲染逻辑的第三方按钮控件。此外,您还可以尝试通过在按钮上设置显式颜色来查看是否可以绕过系统外观设置。是的,我已经尝试过了,它确实保留了颜色,但是我的触发器不起作用。第三方控制不是一个选项。Jay的答案可能会拯救你的一天!弄到这只杰伊有点麻烦。我似乎没有PresentationFramework.Aero。你能提供一个微软视窗主题的例子吗:当我从左到右和中间都出现错误时,按钮罗马被去掉了。干杯。@HAdes我更新了一个简化版本。拔出铬并试一下。当你说“拔出铬”时,我不知道你的意思。如果你的意思是删除“Microsoft\u Windows\u主题:ButtonChrome…”一行,那么我就删除了,现在它只不过是一个透明的框。顺便说一句,我还没有expr blend,所以一切都是手工完成的。@HAdes没错——没有chrome,模板是空的——它所能做的就是显示
ContentPresenter
中的内容。尝试将
ContentPresenter
包装在带有
Background
属性集的
边框中,作为重新创建按钮的开始。您还可以在线免费找到现成的控件主题,例如。您可以使用它们或查看源代码以了解它们是如何组合在一起的。