#silverlight #styles
#silverlight #стили
Вопрос:
В Silverlight 4 (используя выражение Blend 4), как я могу изменить размер шрифта a TextBox
в стиле Border
содержащего его? Я конвертирую стиль из WPF в Silverlight (всегда весело). Вот что у меня есть:
<Style x:Key="Title" TargetType="Border">
<Setter Property="TextBlock.VerticalAlignment" Value="Center"/>
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
<Setter Property="TextBlock.FontSize" Value="48"/>
<Setter Property="TextBlock.Foreground" Value="{StaticResource TextForeground}"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="Background" Value="{StaticResource TitleBackground}"/>
<Setter Property="Padding" Value="25,0"/>
</Style>
Это не работает. Это дает мне следующее исключение в конструкторе:
Правки:
Хорошо, я знаю, что это возможно в WPF. Это просто невозможно в Silverlight (без использования всей конструкции темы, как предлагает Xin?)
Комментарии:
1. я не думаю, что это возможно сделать в Silverlight 4…
2. @Xin, не очень полезно, но честно. Спасибо 🙂
Ответ №1:
На самом деле вы могли бы получить то, что хотите, из тем silverlight toolkit. Вы можете найти это здесь (Тематизация -> Браузер тем).
Обновить:
Сначала вам нужно создать класс, который наследуется от темы (System.Windows.Элементы управления.Тематизация). Я в основном скопировал исходный код и переименовал его.
/// <summary>
/// Implicitly applies the border theme to all of its descendent
/// FrameworkElements.
/// </summary>
/// <QualityBand>Preview</QualityBand>
public class BorderTheme : Theme
{
/// <summary>
/// Stores a reference to a Uri referring to the theme resource for the class.
/// </summary>
private static Uri ThemeResourceUri = new Uri("/theming;component/Theme.xaml", UriKind.Relative);
/// <summary>
/// Initializes a new instance of the ExpressionDarkTheme class.
/// </summary>
public BorderTheme()
: base(ThemeResourceUri)
{
var a = ThemeResourceUri;
}
/// <summary>
/// Gets a value indicating whether this theme is the application theme.
/// </summary>
/// <param name="app">Application instance.</param>
/// <returns>True if this theme is the application theme.</returns>
public static bool GetIsApplicationTheme(Application app)
{
return GetApplicationThemeUri(app) == ThemeResourceUri;
}
/// <summary>
/// Sets a value indicating whether this theme is the application theme.
/// </summary>
/// <param name="app">Application instance.</param>
/// <param name="value">True if this theme should be the application theme.</param>
public static void SetIsApplicationTheme(Application app, bool value)
{
SetApplicationThemeUri(app, ThemeResourceUri);
}
}
Затем вам просто нужно создать словарь ресурсов и назвать его Theme.xaml, и поместить все ваши стили внутрь.
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Border">
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="Background" Value="{StaticResource TitleBackground}"/>
<Setter Property="Padding" Value="25,0"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextAlignment" Value="Center"/>
<Setter Property="FontSize" Value="48"/>
<Setter Property="Foreground" Value="{StaticResource TextForeground}"/>
</Style>
</ResourceDictionary>
И последнее, оберните им свою рамку!
<local:BorderTheme>
<Border>
<TextBlock Text="TextBlock"/>
</Border>
</local:BorderTheme>
Вот и все. Вы должны быть в состоянии видеть стили, примененные к вашей границе, а также к вашему текстовому блоку. 🙂
Комментарии:
1. Я в замешательстве. Как это помогает в моей ситуации. Я хочу создать часы, а вы даете мне чертежи для ракетного корабля.