我有一個網格,其中一個列寬定義爲*
。 其他列定義爲Auto
。 定義了*
的列包含從Panel派生的usercontrol,該控件也實現了IScrollInfo
。 在此控件的MeasureOverride
可見性設置爲在另一列中的RepeatButton
上可見(否則RepeatButton
的可見性設置爲摺疊)。ColumnDefinition不會擴展,直到調整大小
這不會導致列展開。這隻會在我調整窗口大小時發生。 一個簡單的例子:
<DockPanel LastChildFill="True">
<Grid DockPanel.Dock="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="TabItemColumn"/>
<ColumnDefinition x:Name="ScrollRightColumn" Width="Auto"/>
</Grid.ColumnDefinitions>
<ScrollViewer x:Name="PART_ScrollViewer"
Grid.Column="0"
Margin="-1,0,0,0"
Height="32"
CanContentScroll="True"
VerticalScrollBarVisibility="Hidden"
HorizontalScrollBarVisibility="Hidden"
HorizontalAlignment="Left">
<local:TabPanel
x:Name="tabPanel"
HorizontalAlignment="Left"
IsItemsHost="True" />
</ScrollViewer>
<RepeatButton Style="{StaticResource RepeatButtonScrollRight}"
Visibility="{Binding ElementName=tabPanel, Path=CanScrollRight, Converter={StaticResource _localBooleanConverter}}"
Grid.Column="1">
</RepeatButton>
的RepeatButton
的知名度正確觸發,而據我可以告訴它實際上是渲染,但包含列的ActualWidth
是零,直到調整大小。
任何想法?
我很懷疑,但我覺得我已經嘗試過對所有可能的元素無效,沒有多少運氣。爲了澄清:我從不設置寬度。列的寬度設置爲「自動」,並且在repeatbuttons可見性設置爲可見時應擴展爲大小。 我假設父元素是網格。在CanScrollRight屬性設置器中調用Grid上的InvalidateArrange()不起作用。 – risingape 2010-01-25 11:41:57
很難說你的示例代碼中究竟存在哪些問題,但它看起來應該起作用。我可以看到一個可能會產生這種效果的地方,就是您的RepeatButton中沒有任何內容。一般來說,文本應該在這裏,否則按鈕將會是「自動」到0寬度。祝你好運。 – 2010-01-25 14:25:21
@risingape:Tri Q對於默認按鈕寬度來說是正確的,但在您的情況下它可能不適用:只要RepeatButtonScrollRight ControlTemplate的寬度始終爲非零,是否存在內容並不重要。 – 2010-03-03 18:25:40