Стиль изменения окружения граничит с мышью

У меня есть a Grid с a Border вокруг этого. На мышь на Grid, Я хочу изменить стиль на Border. Как я пошел бы о выполнении этого? Это - то, что я попробовал без любого успеха до сих пор:

<Border Name="Border" BorderBrush="Transparent" BorderThickness="1" CornerRadius="2">
    <Grid>
        <Grid.Style>
            <Style TargetType="{x:Type Grid}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="Border" Property="BorderBrush" Value="#FFB9D7FC" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Grid.Style>

        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        ...
    </Grid>
</Border>

После попытки создать этот XAML, я получаю ошибку

Свойство TargetName не может быть установлено на Методе set Стиля.

но я не могу думать ни о каком другом способе сделать это. Справка очень ценилась бы. Использование любого кода - позади вне рассмотрения.

13
задан abatishchev 1 June 2012 в 14:47
поделиться

4 ответа

Нет прямого способа сделать это.

Вы можете загрузить сценарий по запросу. (снова использует нечто похожее на то, что упомянул Игнасио, но намного чище).

Проверьте эту ссылку на наличие нескольких способов: http://ajaxpatterns.org/On-Demand_Javascript

Мой любимый вариант (не всегда применим):

<script src="dojo.js" type="text/javascript">
dojo.require("dojo.aDojoPackage");

Закрытие Google также обеспечивает аналогичную функциональность.

-121--801980-

Необходимо выполнить следующие действия:

  1. Удалите BorterBrush из определения Border. Триггеры могут перезаписывать свойства, заданные установщиками в стилях, но не свойства, заданные непосредственно в тэге.

  2. Поместите триггер в границу, а не в сетку (см. примеры, представленные остальными).

  3. Относительно теста на попадание в сетку: Поместите прозрачный ящик за сеткой, чтобы MouseOver всегда захватывался:

Пример кода для пункта 3:

<Grid>
    <Rectangle Fill="Transparent" /><!-- make sure that the mouse is always over "something" --> 
    <Grid Name="myGrid">       
        <Grid.ColumnDefinitions> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <TextBlock Name="myText">sadasdsa</TextBlock> 
    </Grid> 
</Grid>
14
ответ дан 1 December 2019 в 21:37
поделиться

Черт, это было сложно.

  1. Снимите прозрачную границу. Кажется, он сочетается с цветной кистью, не позволяя вам видеть границу.
  2. Вы можете иметь триггер прямо на самом границе.
  3. Если вы хотите на триггере только сетку, вы можете использовать PyBinding для прикрепления к правильному управлению. (Я не знаю, как это сделать без пибингинга.)

     <имя границы = "Myborder" Margin = "4" пограничности = "4" PicoreRadius = "2">