如何将wpf弹出窗口中的IsOpen属性设置为True?

发布于 2024-11-19 21:08:51 字数 1104 浏览 9 评论 0原文

我有这种 wpf 风格:

<Style x:Key="RequiredControlTemplate">
    <Style.Setters>
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel>
                        <Popup IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver}">
                            <TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
                        </Popup>
                        <Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch">
                            <AdornedElementPlaceholder Name="Adorner"/>
                        </Border>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

我希望如果鼠标位于 Adorner 上,则 Popup 打开,但 IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver} 不起作用...

I have this wpf style:

<Style x:Key="RequiredControlTemplate">
    <Style.Setters>
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel>
                        <Popup IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver}">
                            <TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
                        </Popup>
                        <Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch">
                            <AdornedElementPlaceholder Name="Adorner"/>
                        </Border>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

I want that if mouse is over Adorner then Popup is open, but IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver} not work...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

红墙和绿瓦 2024-11-26 21:08:51

我对你的风格做了一些改变。
添加了几个故事板来玩弹出打开...并触发装饰元素上的故事板

<Style x:Key="RequiredControlTemplate">
            <Style.Setters>
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>
                            <StackPanel>
                                <StackPanel.Resources>
                                    <Storyboard x:Key="OnMouseEnter1">
                                        <BooleanAimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup">
                                            <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
                                        </BooleanAnimationUsingKeyFrames>
                                    </Storyboard>
                                    <Storyboard x:Key="OnMouseLeave1">
                                        <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup">
                                            <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
                                            <DiscreteBooleanKeyFrame KeyTime="0:0:0.1" Value="False"/>
                                        </BooleanAnimationUsingKeyFrames>
                                    </Storyboard>
                                </StackPanel.Resources>
                                <Popup  Name="popup">
                                    <TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
                                </Popup>
                                <Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch">
                                    <AdornedElementPlaceholder Name="Adorner">
                                        <AdornedElementPlaceholder.Triggers>
                                            <EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="Adorner">
                                                <BeginStoryboard x:Name="OnMouseLeave1_BeginStoryboard" Storyboard="{StaticResource OnMouseLeave1}"/>
                                            </EventTrigger>
                                            <EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="Adorner">
                                                <BeginStoryboard Storyboard="{StaticResource OnMouseEnter1}"/>
                                            </EventTrigger>
                                        </AdornedElementPlaceholder.Triggers>
                                    </AdornedElementPlaceholder>
                                </Border>
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>

I made few changes in your style.
added couple of story boards to play with pop up open... and trigger storyboard on adorner element

<Style x:Key="RequiredControlTemplate">
            <Style.Setters>
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>
                            <StackPanel>
                                <StackPanel.Resources>
                                    <Storyboard x:Key="OnMouseEnter1">
                                        <BooleanAimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup">
                                            <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
                                        </BooleanAnimationUsingKeyFrames>
                                    </Storyboard>
                                    <Storyboard x:Key="OnMouseLeave1">
                                        <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup">
                                            <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
                                            <DiscreteBooleanKeyFrame KeyTime="0:0:0.1" Value="False"/>
                                        </BooleanAnimationUsingKeyFrames>
                                    </Storyboard>
                                </StackPanel.Resources>
                                <Popup  Name="popup">
                                    <TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
                                </Popup>
                                <Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch">
                                    <AdornedElementPlaceholder Name="Adorner">
                                        <AdornedElementPlaceholder.Triggers>
                                            <EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="Adorner">
                                                <BeginStoryboard x:Name="OnMouseLeave1_BeginStoryboard" Storyboard="{StaticResource OnMouseLeave1}"/>
                                            </EventTrigger>
                                            <EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="Adorner">
                                                <BeginStoryboard Storyboard="{StaticResource OnMouseEnter1}"/>
                                            </EventTrigger>
                                        </AdornedElementPlaceholder.Triggers>
                                    </AdornedElementPlaceholder>
                                </Border>
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
淡淡的优雅 2024-11-26 21:08:51

Mode=OneWay 添加到绑定中。 IsOpen 默认为 TwoWay,只读属性不允许 TwoWay 绑定。

Add Mode=OneWay to binding. IsOpen is TwoWay by default and read-only properties doesn't allow TwoWay binding.

把时间冻结 2024-11-26 21:08:51

如果您不遵循 MVVM 模式,您可以在 xaml 中指定 x:code ,您可以在其中处理 MouseOver 事件,并使用 EventSetter 附加它。

If you don't follow by MVVM pattern, you can specify x:code in your xaml, where you can handle MouseOver Event, and use EventSetter to attach it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文