WPF Style Trigger на зарубежном UIElement - PullRequest
1 голос
/ 10 августа 2009

Если у меня есть 2 Button s, A и B, возможно ли создать Style и Trigger, чтобы при наведении курсора мыши на Button B это вызывало Button A х Style поменять? Я пытался использовать SourceName и TargetName, и получаю ошибки компилятора. Вот XAML, с которым я дурачусь - я бы хотел, чтобы содержимое Button A было выделено жирным шрифтом, когда Button B наведен на:

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

<Window.Resources>
    <Style x:Key="BoldWhenOver" TargetType="{x:Type Button}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="FontWeight" Value="Bold" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<StackPanel>
    <Button Name="btnA" Content="A" Style="{StaticResource BoldWhenOver}" />
    <Button Name="btnB" Content="B" />
</StackPanel>

1 Ответ

0 голосов
/ 10 августа 2009

Trigger s по своей природе используются для изменения свойств элемента, к которому применяется триггер *, а не других не связанных элементов. Вероятно, есть некоторые хаки, которые вы могли бы реализовать, чтобы сделать что-то подобное, но я не думаю, что это было бы хорошей практикой или соответствовало бы тому, для чего предназначен WPF.

Вы можете встроить btnA и btnB в один пользовательский элемент управления (и затем иметь доступ к обоим в UserControl.Triggers), но это может не иметь логического смысла для чего ты пытаешься сделать. Это делает предположение, что btnA и btnB всегда принадлежат друг другу. Если это не так, вы должны просто подключить это старомодным способом, с парой событий и некоторым кодом позади:

<StackPanel>
   <Button Name="btnA" Content="A"/>
   <Button Name="btnB" Content="B" MouseEnter="btnB_MouseEnter" MouseLeave="btnB_MouseLeave"/>
</StackPanel>

И код:

private void btnB_MouseEnter(object sender, MouseEventArgs e)
{
    btnA.FontWeight = FontWeights.Bold;
}

private void btnB_MouseLeave(object sender, MouseEventArgs e)
{
    btnA.FontWeight = FontWeights.Normal;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...