如何在XAML中绑定公共类

时间:2017-02-01 08:20:48

标签: c# wpf xaml

我已经在触摸屏中为ToolTip创建了新的公共类。我有很多ToolTip的控件和页面。所以我只想在XAML中使用这个普通类。

@ Common Class

public class CommonLayout : Window
{

    Timer Timer { get; set; }
    ToolTip toolTip { get; set; }

    public CommonLayout(TextBlock control)
    {
        Timer = new Timer();
        Timer.Interval = 3000;
        Timer.Elapsed += OnTimerElapsed;

        control.MouseLeave += OnMouseLeave;
        control.MouseLeftButtonUp += OnMouseLeftButtonUp;

    }

    public void OnMouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        CloseToolTip();
    }

    public void OnMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        toolTip = ((ToolTip)((TextBlock)sender).ToolTip);
        toolTip.IsOpen = true;
        Timer.Start();
    }

    private void CloseToolTip()
    {
        if (toolTip != null)
        {
            toolTip.IsOpen = false;
        }
    }

    private void OnTimerElapsed(object sender, ElapsedEventArgs e)
    {
        Timer.Stop();
        Application.Current.Dispatcher.BeginInvoke((Action)CloseToolTip, DispatcherPriority.Send);
    }

}

@XAML 我想绑定常见的ToolTip类关于3种以下的TextBlock。 它也必须在其他页面中使用。

<StackPanel Margin="30">
        <TextBlock x:Name="textBlock"   HorizontalAlignment="Left"  TextWrapping="Wrap" Text="ToolTip Test" 
                ToolTipService.ShowOnDisabled="True"   >
            <TextBlock.ToolTip>
                <ToolTip Placement="Mouse" Content="This is ToolTip Test." />
            </TextBlock.ToolTip>
        </TextBlock>

        <TextBlock x:Name="textBlock1"   HorizontalAlignment="Left"  TextWrapping="Wrap" Text="ToolTip Test1" 
                ToolTipService.ShowOnDisabled="True"   >
            <TextBlock.ToolTip>
                <ToolTip Placement="Mouse" Content="This is ToolTip Test."  />
            </TextBlock.ToolTip>
        </TextBlock>

        <TextBlock x:Name="textBlock2"   HorizontalAlignment="Left"  TextWrapping="Wrap" Text="ToolTip Test2" 
                ToolTipService.ShowOnDisabled="True"   >
            <TextBlock.ToolTip>
                <ToolTip Placement="Mouse" Content="This is ToolTip Test."  />
            </TextBlock.ToolTip>
        </TextBlock>

    </StackPanel>

1 个答案:

答案 0 :(得分:0)

您的CommonLayout继承自Window。因此它只能用作Windows,而不能用作Window的一部分。

为了您的目的,它更适合使用行为机制,尤其适用于您的情况。请按照下一个教程进行操作:https://wpftutorial.net/Behaviors.html

结果看起来像是:

public class CommonLayout : Behavior<UIElement> {
   // your code with corrections from tutorial
}

Xaml是这样的:

<TextBlock>
 <e:Interaction.Behaviors>
    <b:CommonLayout/>
 </e:Interaction.Behaviors>
</TextBlock>

不要忘记之前添加对程序集的引用:System.Windows.Interactivity

我希望它会对你有所帮助。