2011-08-09 67 views
1

我希望你能幫我解決我的問題。它是關於WF 4.0活動的自定義設計器,但問題主要在於設計人員的WPF中。 一些背景如何防止自定義活動設計器中的自動調整大小?

我創建了一個定製的WorkFlow活動來發送電子郵件。對於活動的自定義設計器,我以前一直使用正常的文本框作爲電子郵件的「主題」和「主體」,但我想使用ExpressionTextBox輕鬆地將其綁定到活動的InArguments 。 ExpressionTextBoxes位於網格中,並且此網格位於StackPanel上。

我已經設置了ExpressionTextBoxes的MinWidth,MaxWidth和Margin以適應其他控件,並且在Visual Studio設計器(查看自定義活動設計器,而不是實際的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" /> 

問題

使用時,它最初看起來也理所應當,但是當ExpressionTextBoxes進行編輯,他們收縮成是非常小的。當輸入文本時,控件將展開以適應文本,直到達到其最大寬度。當編輯結束時,它回到它的MaxWidth。無論處於編輯模式還是不處於編輯模式,我都希望它保持相同的大小。

Small demonstration of the problem.

如果你不能看到它,打開圖像here

我已經試過

我大部分時間在做的WinForms,我敢缺乏經驗與WPF,所以我不知道是否有一些時髦的屬性或我錯過了其他設置。我試着設置父控件的寬度屬性(StackPanel和Grid),我試着設置寬度(沒有最小/最大),但它似乎縮小,無論我設置了什麼。

如果你想了解更多信息或代碼,請不要猶豫,問。

更新

正如你可以在評論Maurices的回答看,我想通了,如何通過移除Horizo​​ntalAlignment屬性,然後用利潤,將其調整到右邊來避免此問題。但是我不打算給出答案,除非有解釋爲什麼這種行爲首先發生。我的XAML與Maurice發佈的內容幾乎完全相同,因此其他地方一定有問題。

回答

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> 

所以我懷疑問題可能在您的網格定義。

+0

對於包含ExpressionTextBoxes的列,寬度設置爲「Auto」。我已經嘗試將其設置爲「*」或固定值,雖然這對網格本身有影響,但ExpressionTextBoxes在編輯時仍會縮小。 –

+0

@LarsKristensen:你有沒有試過設置ETB的'Width'? – Will

+0

我試過設置寬度,但它也沒有這樣做。我發現如果我刪除了Horizo​​ntalAlignment =「Right」屬性,問題就消失了。實際上,如果我將Horizo​​ntalAlignement設置爲「Stretch」以外的任何其他值,它將會縮小。但是我希望我的ETB(以及該列中的所有內容)與左側對齊。有沒有辦法做到這一點,而不是直接在控件上設置它,還是我必須微調保證金屬性以適應其他控件? (我有幾個其他的ETB在摺疊的「可選定位符」中) –