我想要将样式(字体大小)应用到我的所有文本框中时遇到问题。
我当然找到了这些链接: Apply an application-level style to all textboxes
How to target all controls (WPF Styles)
但这对我不起作用。
第一个更好,因为您不需要使用密钥,并且可以访问所有文本框。
我的app.xml中已经有样式应用于所有控件(应用颜色),所以我尝试了这样的东西(即使这对我来说真的不够,因为这些样式并不是随处可见) :
<Style x:Key="Type1Data" TargetType="{x:Type Control}">
<Setter Property="Background" Value="#FEE9E6"/>
<Style.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="FontSize" Value="50" />
</Style>
</Style.Resources>
</Style>
正如我所说,我也试过这个,但是不行。
<Style TargetType="{x:Type TextBox}">
<Setter Property="FontSize" Value="50" />
</Style>
知道我的问题是什么,以及如何实现我想要的目标? 我能找到的所有发现让我回到相同的代码,并没有找到一个有效的代码。
编辑:这是我当前的app.xaml
<Application x:Class="myApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:myApp"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style TargetType="TextBox"><!-- tried adding those 3 lines too-->
<Setter Property="FontSize" Value="50"/>
</Style>
<Style x:Key="Type1Data" TargetType="{x:Type Control}">
<Setter Property="Background" Value="Blue"/>
</Style>
<Style x:Key="Type2Data" TargetType="{x:Type Control}">
<Setter Property="Background" Value="White"/>
</Style>
<Style x:Key="Type3Data" TargetType="{x:Type Control}">
<Setter Property="Background" Value="Green"/>
</Style>
</Application.Resources>
</Application>
正如我所说,目前的风格并不涵盖整个应用程序(我添加了所需的密钥,或者什么都没有)
编辑,如果我直接(作为第二个设置者)将字体大小添加到类型1,2或3,则应用字体大小。所以看来,除了app.xml中的3之外,还没有适用的其他样式。
<Setter Property="FontSize" Value="50" />
应该获得不同文本框大小的代码示例(一个已经有样式,一个没有样式),它们在网格中:
<com:ViewControl x:Class="myApp.View.ViewControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
xmlns:input="http://schemas.syncfusion.com/wpf"
xmlns:local="clr-namespace:myApp.View"
xmlns:com="clr-namespace:RAPINF.PLL.Common;assembly=myApp.Common"
xmlns:entities="clr-namespace:myApp.Entities;assembly=myApp.Entities"
mc:Ignorable="d"
d:DesignHeight="500" d:DesignWidth="700">
<TextBox Style="{StaticResource Type1Data}" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Margin="2" Text="{Binding Data.Name}" VerticalAlignment="Center" />
<TextBox Grid.Row="0" Grid.Column="1" Margin="2" Text="{Binding Data.Name}" VerticalAlignment="Center" Grid.ColumnSpan="3" />
编辑:添加我有时使用的弹出窗口的代码并运行
<sf:RibbonWindow x:Class="namespace:myApp.Common.DetailViewWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:sf="http://schemas.syncfusion.com/wpf"
xmlns:self="clr-namespace:myApp.Common"
mc:Ignorable="d"
d:Height="300" d:Width="400"
WindowStartupLocation="CenterOwner"
>
</sf:RibbonWindow>
我的usercontrol如何添加到Dock:
public void AddView(UserControl View, string sTitle, DockState docState)
{
int Width = 800;
int Height = 400;
DockingManager.SetHeader(View, sTitle);
DocumentContainer.SetMDIBounds(View, new Rect(30, 30, Width, Height));
DockingManager.SetState(View, docState);
DockingManager.SetShowCloseMenuItem(View, true);
DockingManager.SetDesiredWidthInDockedMode(View, Width);
DockManager.Children.Add(View);
ActivateView(View);
}
如果我使用底座,我之前会这样做:
ApplicationContext.Current.AddView(View, DockState.Document);
带有弹出窗口,几乎相同:
DetailViewWindow dlg = new DetailViewWindow(View);
dlg.ShowDialog();
因为,这两个代码使用相同的View(是的,完全相同),然后我想这个问题来自于在Dock中添加视图的事实,而不是在弹出窗口中。
停靠管理器是否强制我使用密钥?
感谢您的帮助。
答案 0 :(得分:3)
我无法重现您的问题。我可以告诉你一个有效的例子。也许它可以帮助你找到问题。
<强>的App.xaml 强>
<Application x:Class="WpfApplication2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="FontSize"
Value="50" />
</Style>
</Application.Resources>
</Application>
<强> MainWindow.xaml 强>
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication2"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
mc:Ignorable="d"
Title="MainWindow"
Name="MyWindow"
SizeToContent="WidthAndHeight">
<TextBox Width="150"/>
</Window>
<强>输出强>
答案 1 :(得分:0)
我的样式也没有问题。但是我通常将自己的内容分解为不同控件的单独字典,并从我自己的一些类中派生。我还定义了一种样式,并为其指定了“ x:Key”名称。这就像说我有一个使用此键名的类,并且希望它看起来像这样。然后,一旦我开始使用它,我将参加最后一堂课,并说您根据定义的键使用您的样式...话虽如此,这是App.xaml的基本部分
<Application.Resources>
<Style TargetType="TextBox" x:Key="STextBox">
<Setter Property="FontSize" Value="50"/>
<Setter Property="FontFamily" Value="WingDings" />
</Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource STextBox}" />
</Application.Resources>
我可以定义有关我的基本样式“ STextBox”的所有内容(通过x:Key)。但是之后,我通过x:Key在基于样式的目标上设置了样式。我认为您所缺少的关键是目标必须是{x:Type TextBox}。
如果您查看顶部的xmlns标头,例如
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
“ x =”是它获取控件类型的库的别名。通过您一般性地声明
TargetType="TextBox"
您不是专门与CLASS TYPE相关联。
然后在我的主窗口(以及应用程序中的其他任何位置)中,将其保存在主网格中
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="80" />
<RowDefinition Height="80" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Text="Testing" />
<TextBox Grid.Row="1" Text="Another Line" />
<TextBox Grid.Row="2" Text="Last" />
</Grid>
,它们都可以正常工作。您还可以将默认颜色,大小,字体系列,页边距等更改为基本样式,并且所有更改都会更改,而无需显式引用每个控件。