4

私はプロジェクトに取り組んでおり、マウスを別のコントロールの上に置いたときにコントロールの表示を切り替える Windows 8 XAML 専用のソリューションを見つけるのに助けが必要です。コントロールはボタンまたは任意の Windows8 コントロールにすることができ、すべてのロジックが XAML にあるため、コードは XAML である必要があります。多数の XAML ソリューションを試しましたが、何か不足していると思います。最初の試みでイベント トリガーを作成しましたが、文字列を可視性に変換できないため、次のコードを実行するとクラッシュします。

マイクロソフトの誰でも、または専門家でも、これで私を助けてくれますか? 本当にありがとうございました。私が探しているのは、コード ビハインドにコードを必要としないソリューションです。完全な XAML コードである必要があります。

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <StackPanel Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Button Margin="5" x:Name="btn1">Button 1</Button>

        <Button Margin="5" x:Name="btn2">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.GotFocus">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="btn1" Storyboard.TargetProperty="Button.Visibility" To="Collapsed" Duration="0:0:1"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>

                <EventTrigger RoutedEvent="Button.LostFocus">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="btn1" Storyboard.TargetProperty="Button.Visibility" To="Visible" Duration="0:0:1"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
            Button 2
        </Button>

        <Button Margin="5" x:Name="btn3">Button 3</Button>

    </StackPanel>

</Page>
4

4 に答える 4

0

Visibilityはdoubleではないため、DoubleAnimationでVisibilityを制御することはできません。ObjectAnimationUsingKeyFramesを使用する必要があります。

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="btn1">
    <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
            <Visibility>Collapsed</Visibility>
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

また、動作と視覚的な状態を使用して、XAMLをより設計者にとって使いやすいものにすることをお勧めします。

于 2013-03-14T19:21:01.450 に答える
0

RoutedEvent で EventTrigger を使用できるかどうかはわかりません。役に立つかもしれません。

 <Page.Resources>
    <Style x:Key="TagAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <Border x:Name="AppButton" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
              <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="CommonStates">
                  <VisualState x:Name="Normal">
                    <Storyboard>
                      <Storyboard>
                        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="tbName" />
                      </Storyboard>
                    </Storyboard>
                  </VisualState>
                  <VisualState x:Name="PointerOver">
                    <Storyboard>
                      <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="tbName" />
                    </Storyboard>
                  </VisualState>

                </VisualStateGroup>



              </VisualStateManager.VisualStateGroups>
              <Grid Width="100">
                <Rectangle Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Fill="Transparent"/>
                <TextBlock Text="Button 2" x:Name="tbName" />

              </Grid>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Page.Resources>
  <Grid>
  <StackPanel Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Button Margin="5" x:Name="btn1" Content="Button 1" />
    <Button Margin="5" x:Name="btn2" Style="{StaticResource TagAppBarButtonStyle}" />
    <Button Margin="5" x:Name="btn3" Content="Button 3" />

  </StackPanel>
  </Grid>
于 2013-03-19T16:34:39.553 に答える
0

単に反転したい場合は、プロパティVisibilityへの Binding を使用できます。IsPointerOver

<StackPanel Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel.Resources>
        <local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </StackPanel.Resources>
    <Button Margin="5" x:Name="btn1">Button 1</Button>

    <Button Margin="5" x:Name="btn2"  Visibility="{Binding ElementName=btn1, Path=IsPointerOver, Converter={StaticResource BooleanToVisibilityConverter}}">
        Button 2
    </Button>
</StackPanel>

BooleanToVisibilityConverterWPF のように組み込まれていないため、 のコードを追加する必要があります。

于 2013-03-14T19:35:13.693 に答える
0

WinRT XAML ツールキット

これには、フレームワークに BooleanToVisibilityConverter を含む多くの組み込みコンバーターがあります。

于 2013-05-22T11:35:30.893 に答える