1

我希望你能帮助我解决我的问题。它是关于 WF 4.0 活动的自定义设计器,但问题本质上在于设计器的 WPF。 一些背景

我创建了一个自定义工作流活动来发送电子邮件。对于活动的自定义设计器,我以前一直使用常规文本框作为电子邮件的“主题”和“正文”,但我想使用 ExpressionTextBox 轻松地将其绑定到活动的 InArguments . ExpressionTextBoxes 在一个网格中,这个网格在 StackPanel 上。

我已经设置了 ExpressionTextBoxes 的 MinWidth、MaxWidth 和 Margin 以适应其他控件,并且在 Visual Studio 设计器中(查看自定义活动设计器,而不是实际的工作流),一切看起来都应该如此。

<sapv:ExpressionTextBox Grid.Column="1" Grid.Row="2" Height="Auto" HorizontalAlignment="Right" Margin="4, 4, 4, 4" 
                        Expression="{Binding Path=ModelItem.Subject, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In}"
                        ExpressionType="{x:Type TypeName=sys:String}" OwnerActivity="{Binding Path=ModelItem}" VerticalAlignment="Center" MaxWidth="176" MinWidth="175" />

问题

使用时,最初它看起来也应该如此,但是当编辑 ExpressionTextBoxes 时,它们会缩小到非常小。输入文本时,控件会展开以适合文本,直到达到其 MaxWidth。当编辑结束时,它会回到它的 MaxWidth。无论是否处于编辑模式,我都希望它保持相同的大小。

问题的小演示。

如果看不到,请在此处打开图片

我试过的

我大部分时间都在做 WinForms,而且我对 WPF 非常缺乏经验,所以我不知道是否有一些我错过的时髦属性或其他设置。我试过设置父控件(StackPanel 和 Grid)的宽度属性,我试过只设置宽度(没有最小值/最大值),但无论我设置什么,它似乎都会缩小。

如果您想了解更多信息或代码,请随时询问。

更新

正如您在对 Maurices 答案的评论中看到的那样,我想出了如何通过删除 Horizo​​ntalAlignment 属性,然后使用边距将其与右侧对齐来避免该问题。但我不会标记答案,直到首先解释为什么会发生这种行为。我的 XAML 与 Maurice 发布的几乎相同,因此其他地方肯定有问题。

4

1 回答 1

0

ExpressionTextBox 的 XAML 对我来说看起来不错,当我尝试使用以下设计器时,它工作得很好。

<sap:ActivityDesigner x:Class="WorkflowConsoleApplication2.MyActivityDesigner"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:sys="clr-namespace:System;assembly=mscorlib"
                      xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
                      xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"
                      xmlns:sapc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation">
  <sap:ActivityDesigner.Resources>
    <sapc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
  </sap:ActivityDesigner.Resources>
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition/>
      <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="30"/>
      <RowDefinition Height="30"/>
      <RowDefinition Height="30"/>
    </Grid.RowDefinitions>
    <Label Content="Subject"
           Grid.Row="2"
           Grid.Column="0"/>
    <sapv:ExpressionTextBox Grid.Column="1"
                            Grid.Row="2"
                            Height="Auto"
                            HorizontalAlignment="Right"
                            Margin="4, 4, 4, 4"
                            Expression="{Binding Path=ModelItem.Subject, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In}"
                            ExpressionType="{x:Type TypeName=sys:String}"
                            OwnerActivity="{Binding Path=ModelItem}"
                            VerticalAlignment="Center"
                            MaxWidth="176"
                            MinWidth="175" />
  </Grid>
</sap:ActivityDesigner>

所以我怀疑问题可能出在您的网格定义中。

于 2011-08-09T10:59:55.717 回答