Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Как изменить свойства элемента?


Автор: Balagun 25.9.2010, 17:20
Допустим есть 10 прямоугольников (Rectangle) с одинаковыми свойствами, описанными в Style1, в котором в частности <Setter Property="Fill" Value="Red" />. Допустим, я хочу, чтобы при наведении мыши на прямоугольник цвет заливки менялся на Blue. В Style1 я добавляю триггер:
Код

<Trigger Property="IsMouseOver" Value="True">
    <Setter Property="Fill" Value="Blue" />
</Trigger>

Работает.

Теперь допустим, что над каждым из Rectangle расположено Image в формате PNG, которое представляет собой рамку с прозрачной серединой такого же размера, что и прямоугольник под ней.
Суть кода такова:
Код

<Grid ...>
    <Rectangle x:Name="01" style="Style1" .../>
    <Rectangle x:Name="02" style="Style1" .../>
    .........
    <Rectangle x:Name="10" style="Style1" .../>
</Grid>
<Grid ...>
    <Image x:Name="001" style="Style2" .../>
    <Image x:Name="002" style="Style2" .../>
    .........
    <Image x:Name="010" style="Style2" .../>
</Grid>

.........

<style x:Key="Style1" ...>
    <setter ... />
</style>

<style x:Key="Style2" ...>
    <setter ... />
</style>

Соответственно, теперь при наведении мыши на Rectangle, триггер не сработает, т.к. Rectangle закрыт Image.
Как сделать так, чтобы при наведении курсора на определенный Image менялся цвет расположенного под ним Rectangle?
Можно конечно для каждого Image описать на C# событие, которое будет менять цвет прямоугольника под ним, но получается, что описаний будет столько же, сколько прямоугольников, и потому хотелось бы сделать изящней.

Автор: Balagun 27.9.2010, 07:14
Может кто прокомментирует...

Сделал с помощью свойства Tag и Binding, работает... Не знаю, насколько это соответствует концепции, но выглядит так:

Код

<Grid ...>
    <Rectangle x:Name="Rect01" style="RectStyle1" ......... Fill="{Binding Tag, ElementName=Img01}" />
    <Rectangle x:Name="Rect02" style="RectStyle1" ......... Fill="{Binding Tag, ElementName=Img02}" />
    .........
    <Rectangle x:Name="Rect10" style="RectStyle1" ......... Fill="{Binding Tag, ElementName=img10}" />
</Grid>
<Grid ...>
    <Image x:Name="Img01" style="ImgStyle2" ......... />
    <Image x:Name="Img02" style="ImgStyle2" ......... />
    .........
    <Image x:Name="Img10" style="ImgStyle2" ......... />
</Grid>

.........

<style x:Key="RectStyle1" ......... >
    <setter ......... />
</style>

<style x:Key="ImgStyle2" .........>
    <setter ......... />
    <Setter Property="Tag" Value="Red" />
    <Style.Triggers>
         <Trigger Property="IsMouseOver" Value="True">
             <Setter Property="Tag" Value="Green" />
         </Trigger>
     </Style.Triggers>
</style>


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)