WPF样式、可见性

WPF样式、可见性,wpf,styles,mouseevent,visibility,togglebutton,Wpf,Styles,Mouseevent,Visibility,Togglebutton,现在我有了一个ToggleButton样式,然后我设置了Chrome.Visibility=Visibility.Hidden它看起来像是隐藏了ToggleButton,但不是 我使用snoop,发现ToggleButton的可见性是可见的。如何更改ToggleButton在样式中的可见性 风格如下: <Style x:Key="ToggleButtonStyle" TargetType="{x:Type ToggleButton}"> <

现在我有了一个ToggleButton样式,然后我设置了Chrome.Visibility=Visibility.Hidden它看起来像是隐藏了ToggleButton,但不是

我使用snoop,发现ToggleButton的可见性是可见的。如何更改ToggleButton在样式中的可见性

风格如下:

 <Style x:Key="ToggleButtonStyle"
           TargetType="{x:Type ToggleButton}">
        <Setter Property="FocusVisualStyle"
                Value="{StaticResource ButtonFocusVisual}" />
        <Setter Property="Background"
                Value="{StaticResource ButtonNormalBackground}" />
        <Setter Property="BorderBrush"
                Value="{StaticResource ButtonNormalBorder}" />
        <Setter Property="BorderThickness"
                Value="1" />
        <Setter Property="Foreground"
                Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
        <Setter Property="HorizontalContentAlignment"
                Value="Center" />
        <Setter Property="VerticalContentAlignment"
                Value="Center" />
        <Setter Property="Padding"
                Value="1" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <ControlTemplate.Resources>
                        <Storyboard x:Key="go">
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
                                                           Storyboard.TargetName="grid">
                                <DiscreteObjectKeyFrame KeyTime="0:0:0.5"
                                                        Value="{x:Static Visibility.Collapsed}" />
                            </ObjectAnimationUsingKeyFrames>
                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
                                                           Storyboard.TargetName="grid">
                                <EasingDoubleKeyFrame KeyTime="0:0:0.5"
                                                      Value="720" />
                            </DoubleAnimationUsingKeyFrames>
                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                                           Storyboard.TargetName="grid">
                                <EasingDoubleKeyFrame KeyTime="0:0:0.5"
                                                      Value="0.15" />
                            </DoubleAnimationUsingKeyFrames>
                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
                                                           Storyboard.TargetName="grid">
                                <EasingDoubleKeyFrame KeyTime="0:0:0.5"
                                                      Value="0.15" />
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                    </ControlTemplate.Resources>
                    <Grid x:Name="grid"
                          RenderTransformOrigin="0.5,0.5">
                        <Grid.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform />
                                <TranslateTransform />
                            </TransformGroup>
                        </Grid.RenderTransform>
                        <Border x:Name="Chrome"
                                BorderThickness="5"
                                CornerRadius="10"
                                BorderBrush="#FFD7FF25"
                                Grid.ColumnSpan="2">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                              Margin="{TemplateBinding Padding}"
                                              RecognizesAccessKey="True"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                        </Border>
                        <Button x:Name="button"
                                HorizontalAlignment="Right"
                                VerticalAlignment="Top"
                                Height="16.333"
                                Width="Auto"
                                Background="#FFD7FF25"
                                Foreground="#FFFF0B0B"
                                HorizontalContentAlignment="Center"
                                VerticalContentAlignment="Center"
                                BorderBrush="#FFD7FF25"
                                Padding="0,-6,0,0"
                                FontSize="16"
                                Margin="0,-4.167,-3.334,0"
                                Content="x"
                                Focusable="False"
                                Visibility="Collapsed"
                                Click="Button_OnClick"
                                BorderThickness="1" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver"
                                 Value="True"
                                 SourceName="grid">
                            <Setter Property="Visibility"
                                    TargetName="button"
                                    Value="Visible" />
                            <Setter Property="BorderBrush"
                                    TargetName="Chrome"
                                    Value="#FF4DFF25" />
                            <Setter Property="BorderBrush"
                                    TargetName="button"
                                    Value="#FF4DFF25" />
                            <Setter Property="Background"
                                    TargetName="button"
                                    Value="#FF4DFF25" />
                        </Trigger>
                        <EventTrigger RoutedEvent="ButtonBase.Click"
                                      SourceName="button">
                            <BeginStoryboard x:Name="go_BeginStoryboard"
                                             Storyboard="{StaticResource go}" />
                        </EventTrigger>
                        <Trigger Property="IsChecked"
                                 Value="true">
                            <Setter Property="BorderBrush"
                                    TargetName="Chrome"
                                    Value="Red" />
                        </Trigger>
                        <Trigger Property="IsEnabled"
                                 Value="false">
                            <Setter Property="Foreground"
                                    Value="#ADADAD" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
鼠标悬停时,ToggleButton将显示一个带有X的按钮,单击它,该ToggleButton将消失


注意:将ToggleButton放在一个WrapPanel中,不止一个,您可以在WrapPanel前面看到一个空白。

您可以像这样添加可见性设置器

 <Style TargetType="Button" x:Key="hello" >
        <Setter Property="Visibility" Value="Visible">

        </Setter>
    </Style>
<Button Style="{Binding Source={StaticResource hello}}" Width="100" Background="Red" Height="100" />
在任何像这样的按钮上使用此按钮

 <Style TargetType="Button" x:Key="hello" >
        <Setter Property="Visibility" Value="Visible">

        </Setter>
    </Style>
<Button Style="{Binding Source={StaticResource hello}}" Width="100" Background="Red" Height="100" />

希望这有帮助..对于下面的查询plz注释..

如果我理解正确,动画将正常工作,切换按钮将消失。但是你想让他从面板上消失,帕帕内尔释放了这个地方,周围的元素移动了他

您的示例不起作用,因为在动画中指定了栅格:


请输入一些有关此问题的代码。我无法放置图片。我以样式编辑togglebutton的内容,现在网格是其根元素,我以样式更改网格的可见性,但togglebutton的可见性没有更改我在snoopa spy++for wpf中查看它,它留下一个空白。我不知道如何在样式中设置togglebutton的可见性。我运行了您的示例。有一个绿色按钮,当你悬停时,红十字会出现。我点击的X切换按钮已消失。你有同样的工作吗?如果是这样的话,你应该怎么做?@Anatoliy Nikolaev谢谢,你可以这样做,把开关按钮放在一个包装袋里,越来越多,点击x关闭它,你可以在包装袋前面找一个空白,这是正常的行为。有一个面板,里面有按钮。你把按钮藏在它的地方了有一个空的地方。你想删除隐藏按钮的空白吗?谢谢,恐怕你不明白我的意思。我想通过单击一个按钮来修改该按钮的可见性,该按钮在一个样式中。换句话说,该按钮在一个按钮中,它的功能是通过设置该按钮的可见性=折叠来关闭该按钮。