Как переопределить TextBlock IsHitTestVisible в приложении Silverlight

Я приберегу свои разглагольствования, почему они сделали это таким образом, для другого места, так что...

Я пытаюсь помешать TextBlocks получить фокус в моем приложении Silverlight. Кажется, что добавление установщика для этого свойства в любой TextBlock в классе базовой страницы моего приложения (наследование страницы) имеет некоторый смысл, но 1) я, вероятно, ошибаюсь и 2) я не могу понять это правильно.

Я пробовал варианты добавления такого кода:

        this.Style.Setters.Add(new Setter(TextBlock.IsHitTestVisibleProperty, false));

в конструктор базового класса Page моего приложения (наследуется непосредственно от Page) или в обработчике событий Loaded страницы. Но большинство вариаций на эту тему, похоже, не работают (как правило, кажется, что все нужные члены еще не существуют или XamlParseExceptions.

Наверное, это до абсурда просто, но, по-видимому, мой мозг тоже. Любые идеи?


person John Spiegel    schedule 15.03.2011    source источник


Ответы (1)


Вы можете просто использовать неявный стиль

<Style TargetType="TextBlock">
   <Setter Property="IsHitTestVisible" Value="False" />
</Style>

Как правило, стили объединяются на верхнем уровне файла App.xaml, если они находятся в отдельных словарях ресурсов, или вы можете просто добавить туда свой стиль. Я сам новичок в Silverlight, поэтому сообщаю только то, что видел.

Предполагая, что у вас есть пустой App.xaml, он может выглядеть примерно так:

<Application
  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" 
  x:Class="YourApp.App"
  mc:Ignorable="d">

    <Application.Resources>
        <ResourceDictionary>
            <Style TargetType="TextBlock">
                <Setter Property="IsHitTestVisible" Value="False" />
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Это довольно просто проверить, вы можете добавить установщик цвета переднего плана и посмотреть, все ли ваши TextBlocks подберут стиль.

person Marc    schedule 15.03.2011
comment
Спасибо, Марк. Простите мой XAML-нубизм, но класс базовой страницы, с которым я работаю, - это файл cs. Как все страницы наследуют XAML, который вы изложили? - person John Spiegel; 15.03.2011
comment
У вас может быть или не быть актива стиля. Обычно они объединяются в файле app.xaml. Я попытаюсь выполнить элементарное редактирование, чтобы решить эту проблему. - person Marc; 15.03.2011