如何防止自定义活动设计器中的自动调整大小?

时间:2011-08-09 09:31:08

标签: c# wpf xaml workflow-foundation-4 custom-activity

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

我已经创建了一个自定义的WorkFlow活动来发送电子邮件。对于活动的自定义设计器,我以前一直使用常规Textboxes作为电子邮件的“主题”和“正文”,但我想使用ExpressionTextBox轻松地将它绑定到活动的InArguments 。 ExpressionTextBox位于网格中,此网格位于StackPanel上。

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

<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" />

问题

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

Small demonstration of the problem.

如果看不到,请打开图片here

我尝试了什么

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

如果您想了解更多信息或代码,请不要犹豫。

更新

正如您在Maurices回答的评论中所看到的,我想出了如何通过删除horizo​​ntalAlignment属性,然后使用边距将其对齐到右边来避免此问题。但是我不打算给出答案,直到有一个解释为什么这种行为首先发生。我的XAML几乎与Maurice发布的相同,所以其他地方一定有问题。

1 个答案:

答案 0 :(得分: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>

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