我使用了自定义确认弹出窗口,这是XAML:
DataRow[] bdArray = new DataRow[table.RowCount];
Parallel.ForEach(table, new ParallelOptions { MaxDegreeOfParallelism = 2 }, row =>
{
DataRow newrow = BDDestino.newrow("Cars");
newrow["Code"] = row["CODE"];
newrow["Name"] = row["NAME"];
// Add the new row in a pre-arranged position
int index = table.indexOf(row);
bdArray[index] = newrow;
});
这是代码behide:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Content}" TextWrapping="Wrap" Width="150"/>
<StackPanel Orientation="Horizontal" Margin="6" Grid.Row="1">
<Button x:Name="YesBtn" Width="100" Content="OK" Click="OnOk_Click"/>
<Button x:Name="NoBtn" Width="100" Content="No" Click="OnNo_Click"/>
</StackPanel>
</Grid>
在视图模型类中,我有:
如果我首先显示长消息,我的自定义窗口会将其内容调整为空洞消息,这没关系! 但如果要显示短信,我的窗口会保留以前的大小!
注意:即使我将窗口SizeToContent样式设置为WidthAndHeight但它不起作用。
public partial class CustomConfirmation : IInteractionRequestAware
{
public CustomConfirmation()
{
InitializeComponent();
}
public IConfirmation Confirmation
{
get { return this.DataContext as IConfirmation; }
set { this.DataContext = value; }
}
public string Title { get; set; }
public bool Confirmed { get; set; }
public INotification Notification { get; set; }
public Action FinishInteraction { get; set; }
private void OnOk_Click(object sender, RoutedEventArgs e)
{
if (FinishInteraction != null)
{
Confirmation.Confirmed= true;
FinishInteraction();
}
}
private void OnNo_Click(object sender, RoutedEventArgs e)
{
if (FinishInteraction != null)
{
Confirmation.Confirmed = false;
FinishInteraction();
}
}
}
你可以指导我吗?
提前谢谢
解: 我通过在自定义弹出窗口后面的代码中添加此代码来解决问题:
<ei:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding ConfirmationRequest, Mode=TwoWay}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True">
<prism:PopupWindowAction.WindowStyle>
<Style TargetType="Window">
<Setter Property="SizeToContent" Value="WidthAndHeight"/>
</Style>
</prism:PopupWindowAction.WindowStyle>
<prism:PopupWindowAction.WindowContent>
<local:CustomConfirmation/>
</prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
</ei:Interaction.Triggers>
答案 0 :(得分:2)
每次显示新弹出窗口时都会重复使用WindowContent属性。因此,当您首次显示弹出窗口时,会显示CustomPopupView,并根据当前内容设置高度。现在,当您关闭弹出窗口并将内容更改为更大的消息然后再次显示时,CustomPopupView.Height已经由上一个操作设置,并且未及时更新以使新窗口获得正确的高度。因此,您现在必须调整窗口大小以匹配CustomPopupView高度的新大小。所以只需添加一些代码就可以在你的代码隐藏中处理这个:
public CustomPopupView()
{
InitializeComponent();
Loaded += CustomPopupView_Loaded;
}
private void CustomPopupView_Loaded(object sender, RoutedEventArgs e)
{
var parentWindow = this.Parent as Window;
if (parentWindow != null)
parentWindow.MinHeight = _txt.ActualHeight + 75;
}
注意:'_ txt'是带有内容绑定的TextBlock的名称。
答案 1 :(得分:0)
我认为这与Prism附带的默认确认窗口有关。 MinWidth和MinHeight分别在XAML中设置为300和150。因此,无论窗口内容是什么,窗口宽度/重量都不会变小。覆盖窗口样式不足以满足您的需求。
如果您对此感到满意,可以下载Prism代码并删除该限制。您想要开始的文件的源路径如下所示。
\源\ WPF \ Prism.Wpf \交互\ DefaultPopupWindows \ DefaultConfirmationWindow.xaml
要么是这样,要么让棱镜团队看看他们是否可以使这更灵活,这可能是一个更好的建议。您可以在GitHub页面上将其作为问题发布。 https://github.com/PrismLibrary/Prism/issues