WPF Установка стиля по умолчанию на TextBlock переопределяет стиль для Маркировки

Установка стиля по умолчанию на TextBlock заставляет стиль в Маркировке и других средствах управления быть установленным также. Это только происходит при помещении стилей в Ресурсы приложений когда я помещаю стиль в ресурсы Окна, все прекрасно.

Я также нашел, что Разработчик VS 2008 и XamlPadX отображают Маркировку, как Вы ожидали бы, но проблема только происходит при выполнении приложения в реальной жизни.

<Application x:Class="WpfApplication.App"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   StartupUri="Window1.xaml">
   <Application.Resources>
       <ResourceDictionary>
           <Style TargetType="TextBlock">
               <Setter Property="FontSize" Value="8"/>
           </Style>

           <Style x:Key="Title" TargetType="Label">
               <Setter Property="FontSize" Value="32"/>
           </Style>
       </ResourceDictionary>
   </Application.Resources>
</Application>

<Window x:Class="WpfApplication.Window1"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Height="300"
       Title="Window1"
       Width="300">
   <StackPanel>

       <TextBlock Text="TextBlock No Style" Style="{x:Null}"/>
       <Label Content="Label No Style" Style="{x:Null}"/>

       <TextBlock Text="Default TextBlock"/>
       <Label Content="Default Label" Style="{StaticResource Title}"/>

   </StackPanel>
</Window>

Код выше дисплеев:

TextBlock No Style - Default font size (As you would expect)
Label No Style - Size 5 font size (How did this happen?)
Default TextBlock - Size 5 font size (As expected by my style)
Default Label - Size 5 font size (How did this happen?)
8
задан Dave Clemmer 15 August 2011 в 17:32
поделиться

1 ответ

Вариант 3 (PUT для какого-то отдельного подресурса) - это ваша лучшая ставка прямо сейчас, и не обязательно «неправильно» просто использовать POST для самого основного ресурса - хотя вы можете не согласиться с этим в зависимости от того, насколько педантичным вы хотите быть в этом отношении.

Придерживайтесь 3 и используйте более детализированные субресурсы, и если у вас действительно есть потребность в PATCH-подобном поведении - используйте POST. Лично я все еще буду использовать этот подход, даже если PATCH действительно окажется жизнеспособным вариантом.

-121--2348239-

Для создания собственных версий сборок .NET можно использовать NGEN . Это означает, что JIT не должен выполнять это во время выполнения.

.NET сначала компилируется в IL, а затем в собственный, поскольку JIT был разработан для оптимизации кода IL для текущего ЦП, под которым выполняется код.

Код .NET компилируется в IL для совместимости. Так как вы можете создать код с помощью C #, VB.NET и т.д., то JIT необходим общий набор команд (IL) для компиляции в собственный код. Если JIT должен быть осведомлен о языках, то JIT необходимо будет обновить при выпуске нового языка .NET.

Я не уверен в вопросе о песочнице, я думаю, что приложение .NET работает с 3 доменами приложений. Один домен содержит среды выполнения .NET (mscorlib, system.dll и т.д.), другой домен содержит ваш код .NET, и я не могу вспомнить, для чего предназначен другой домен. Проверьте http://my.safaribooksonline.com/9780321584090

-121--3866237-

Да, это следует ожидать; посмотрите на шаблон по умолчанию для Label, это всего лишь элемент TextBlock с отступом. Стили наследуются , поэтому для параметра Label будет установлено значение 32, но затем стиль TextBlock переопределит это значение. Если бы ты только что это было, это было бы также 5pt.

Edit: Таким образом, я бы решил это, чтобы создать фиктивный подкласс (т.е. класс, который ничего не меняет) TextBlock называется NormalText, затем стиль, который; таким образом, вы не случайно возьмете другие TextBlocks.

11
ответ дан 5 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: