簡體   English   中英

在ToolTip WPF上使用情節提要

[英]Using a Storyboard on a ToolTip WPF

我正在嘗試創建一個情節提要板,以便當用戶單擊文本框時,它會將文本復制到他們的剪貼板中並顯示提示復制的工具提示,然后該提示消失。

這是我的嘗試:

xaml

<TextBox Name="PolyValue" Text="{Binding .}" IsReadOnly="True" BorderThickness="0" Background="White"
        VerticalAlignment="Center" PreviewMouseDown="CopyTextBox" >

    <TextBox.ToolTip>
        <ToolTip Style="{StaticResource TooltipPopupFadeAway}" IsOpen="True" Opacity="0" Background="Transparent" BorderThickness="0">
            <Border Background="White" BorderBrush="Black" BorderThickness="1" CornerRadius="3" >
                <Label Content="Copied" Padding="5, 2" />
            </Border>
        </ToolTip>
    </TextBox.ToolTip>
</TextBox>

這是Storyboard

<Style x:Key="TooltipPopupFadeAway" TargetType="ToolTip">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Opacity, RelativeSource={RelativeSource Self}}" Value="1">
            <DataTrigger.EnterActions>
                <BeginStoryboard x:Name="ClosePopupStoryBoard">
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="00:00:01" From="3" To="0" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

后面的代碼:

private void CopyTextBox(object sender, MouseButtonEventArgs e)
{
    if(sender is TextBox textBox)
    {
        Clipboard.SetText(textBox.Text);
        (textBox.ToolTip as ToolTip).IsOpen = false;
        (textBox.ToolTip as ToolTip).IsOpen = true; //this recalculates the position
        (textBox.ToolTip as ToolTip).Opacity = 1;

    }
}

這完全符合我的要求,但是僅顯示一次,並且用戶再次單擊后,它什么也沒有發生。

CopyTextBox方法中設置斷點后,即使在通過編程將其設置為1后,ToolTip的不透明度也為0。

我不確定自己在做什么錯?

您應該直接在IsOpen屬性上觸發。 確保將默認的Opacity設置為0 ,然后不要將其顯式設置為1

<Style x:Key="TooltipPopupFadeAway" TargetType="ToolTip">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="Opacity" Value="0"/>
    <Setter Property="IsOpen" Value="False"/>
    <Style.Triggers>
        <Trigger Property="IsOpen" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                         Duration="0:0:1" From="3" To="0"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
        </Trigger>
    </Style.Triggers>
</Style>

在后面的代碼中,不要設置不透明度:

private void CopyTextBox(object sender, MouseButtonEventArgs e)
{
    if (sender is TextBox textBox)
    {
        Clipboard.SetText(textBox.Text);
        ((ToolTip)textBox.ToolTip).IsOpen = false;
        ((ToolTip)textBox.ToolTip).IsOpen = true;
    }
}

我的意思是這種方法。

只需綁定text屬性就意味着您不需要任何代碼。

我不確定這是否確實符合您的要求,因為您似乎已經在預覽時顯示了工具提示。 對於工具提示,這有點奇怪,因為鼠標懸停顯示了它們。

<Window.Resources>
    <ControlTemplate x:Key="TooltipPopupFadeAway" TargetType="ToolTip">
                    <Border Background="Yellow">
                    <TextBlock Text="{Binding PlacementTarget.Text, RelativeSource={RelativeSource AncestorType={x:Type ToolTip}}}"
                               Name="TheText"
                               />
                    </Border>
        <ControlTemplate.Triggers>
            <EventTrigger RoutedEvent="ToolTip.Opened">
                <BeginStoryboard>
                    <Storyboard TargetProperty="Opacity">
                        <DoubleAnimation From="1.0" To="0" Duration="0:0:2" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <TextBox>
        <TextBox.ToolTip>
            <ToolTip Template="{StaticResource TooltipPopupFadeAway}"/>
        </TextBox.ToolTip> 
    </TextBox>
</Grid>

如果您更適合,可以通過樣式設置模板和工具提示等。 我使用了黃色背景,所以我看起來很容易。 工具提示可能與您所擁有的不完全匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM