gpt4 book ai didi

c# - wpf:如何弹出用户控件?

转载 作者:太空狗 更新时间:2023-10-29 21:22:46 24 4
gpt4 key购买 nike

背景:我有一个使用数据网格显示数据的项目,数据网格有一个包含用户控件的行详细信息列。用户控件有一些文本框供用户输入和显示一些消息。

问题:我想在单击按钮时弹出 usercontrol,并且弹出的 usercontrol 与 datagrid 的 rowdetail 列中的 usercontrol 具有相同的上下文。这样做的目的是让用户可以轻松地与用户控件进行交互,因为 rowdetail 单元格的空间是有限的。

usecontrol已经实现,可以在rowdetail单元格中正常使用。但是,我不知道如何在不更改其上下文的情况下将其弹出,例如数据源、消息已显示在 TextBox 中等。任何人都可以给我一些建议吗?顺便说一下,我使用 MVVM 模式。

编辑:这是 RowDetailTemplate:

    <DataTemplate x:Key="RowDetailTemplate">
<Grid x:Name="RowDetailGrid" HorizontalAlignment="Left" Width="850" Height="355" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<my:MyUserControl x:Name="myUserControl" />
<Button Grid.Row="1" Width="60" Height="25" Content="Pop Up"
Command="{Binding Path=PopupCommand}"/>
.....
</Grid>
</DataTemplate>

这是用户控件(上面代码中的 MyUserControl):

<UserControl x:Class="MyProject"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="600">
<Grid>
<ScrollViewer Margin="0" HorizontalScrollBarVisibility="Disabled" >
<StackPanel>
<ItemsControl Grid.Row="0" ItemsSource="{Binding Output, Mode=OneWay}" FontSize="12">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding Path=.}" Foreground="White" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<DockPanel Grid.Row="1" LastChildFill="True">
<TextBox Text="{Binding Input, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
TextWrapping="Wrap"
BorderBrush="{x:Null}" SelectionBrush="{x:Null}"
BorderThickness="0" Width="Auto">
<TextBox.InputBindings>
<KeyBinding Command="{Binding Path=TextBoxEnter}" Key="Enter" />
</TextBox.InputBindings>
</TextBox>
</DockPanel>
</StackPanel>
</ScrollViewer>
</Grid>

最佳答案

您可以使用Popup 控件。将 Popup 附加到数据网格的当前行,当您单击该按钮时,可能是创建弹出窗口并将其作为您所在行中的其中一个单元格的子项的好地方。< br/>然后您可以将用户控件添加到弹出窗口,然后“显示”弹出窗口。这样,弹出窗口的 DataContext 以及用户控件的 DataContext 是从数据网格中的包含行继承的。

下面是仅使用 XAML 的 Popup 控件的一个非常简单的实现:

<StackPanel>
<CheckBox Name="chk1"/>
<Popup IsOpen="{Binding IsChecked, ElementName=chk1}">
<Border Background="White">
<TextBlock Margin="20" Text="I'm Popped Up!"/>
</Border>
</Popup>
</StackPanel>

弹出窗口包含在堆栈面板中,但仅在复选框被选中时可见,IsOpen。您可以将您的用户控件放在弹出窗口中,我已经在其中放置了边框和文本 block 。由于弹出窗口是 stackpanel 的成员,如果它没有自己的 DataContext,它会自动使用 stackpanel 的 DataContext。

在您的实例中,我显示的堆栈面板类似于您的 DataGrid 行。

关于c# - wpf:如何弹出用户控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18719977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com