Возможно ли установить UserControl всегда самым верхним над приложением?

#c# #wpf

#c# #wpf

Вопрос:

Я создаю опцию обратной связи в своем приложении WPF. В главном окне есть TabControl и строка состояния ниже. В строке состояния есть кнопка, которая показывает FeedBackView с анимацией.

Итак, FeedBackView — это не окно, это UserControl, который содержится в Canvas Border .

В приложении есть некоторые опции, которые открывают другие модальные окна, поэтому в этот момент форма обратной связи недоступна. Я попытался установить Panel.zIndex = 1, и это не помогло. Итак, есть ли какой-нибудь способ установить форму самым верхним в приложении?

 <UserControl x:Class="UPR.Wpf.App.Views.StatusBarContentView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:v="clr-namespace:UPR.Wpf.App.Views.FeedBack"
             xmlns:vm="clr-namespace:UPR.Wpf.App"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800" Loaded="UserControl_Loaded">

    <UserControl.Resources>        
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../../Styles/Buttons.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <BooleanToVisibilityConverter x:Key="xBooleanToVisibilityConverter"/>
        </ResourceDictionary>
    </UserControl.Resources>

    <Canvas>
        <Button Name="FeedBackButton"                
                Click="FeedBackButton_Click"                    
                Loaded="FeedBackButton_Loaded"
                BorderThickness="0.5"
                BorderBrush="Gray"
                Foreground="White"
                FontWeight="Bold"
                FontSize="15"
                Height="32"
                Canvas.Bottom="-17"
                Canvas.Right="-150">
        </Button>
        <Border BorderBrush="Gray"
                Panel.ZIndex="1"
                BorderThickness="2"
                Name="border" 
                Margin="-350,0,-178,-9" 
                Background="White"
                Canvas.Bottom="24"
                Canvas.Right="-5"
                SizeChanged="border_SizeChanged">
            <v:FeedBackView/>
        </Border>
    </Canvas>
</UserControl>
  

Комментарии:

1. «Итак, FeedBackView — это не окно», тогда почему это не окно?

2. Правильно ли я понимаю, что вы хотите, чтобы обратная связь была интерактивной при отображении модальных окон? Я думаю, вам нужно будет добавить usercontrol обратной связи в модальную форму, чтобы разрешить нажатие оттуда…

3. Да, я имею в виду это. Итак, ваш вариант — единственный способ? @Schwarzie

4. Просто природа модальных окон такова, что они блокируют все взаимодействия пользовательского интерфейса с другими окнами.

5. Я немного подумал об альтернативе, но они очень быстро становятся взломанными.