2009-05-19 102 views
9

以下Microsoft example code包含以下內容:WPF邊境DesiredHeight

<Grid> 
...  
    <Border Name="Content" ... > 
...  
    </Border> 
</Grid> 
<ControlTemplate.Triggers> 
    <Trigger Property="IsExpanded" Value="True"> 
    <Setter TargetName="ContentRow" Property="Height" 
      Value="{Binding ElementName=Content,Path=DesiredHeight}" /> 
    </Trigger> 
... 
</ControlTemplate.Triggers> 

在運行,但是,此代碼生成以下數據綁定錯誤:

System.Windows.Data Error: 39 : BindingExpression path error: 'DesiredHeight' property not found on 'object' ''Border' (Name='Content')'. BindingExpression:Path=DesiredHeight; DataItem='Border' (Name='Content'); target element is 'RowDefinition' (HashCode=2034711); target property is 'Height' (type 'GridLength') 

儘管這樣的錯誤,代碼工作正常。我查看了文檔,並且DesiredHeight似乎不是Border的成員。任何人都可以解釋DesiredHeight來自哪裏?此外,有沒有辦法解決/抑制這個錯誤,所以我的程序輸出是乾淨的?

回答

8

你可以看到在你的應用程序的代碼部分,物業

編輯:

Border content = new Border(); 
int desiredHeight = content.DesiredSize.Height; 
int desiredWidth = content.DesiredSize.Width; 

爲了解決這個問題,嘗試結合的高度屬性,因爲DesiredHeight似乎並不可用在Border控件的XAML標記中。

+0

好吧,那有效(雖然DesiredSize.Height是雙)。那麼DesiredHeight只是映射到Border.DesiredSize.Height?這是某種無證財產嗎? – 2009-05-19 17:13:13

+0

我確定它不是無證的,事情是XAML根據它們的內容來控制自己的大小,即使你將高度設置爲100,它可以因爲任何其他原因而改變,並且新的高度和寬度將被包含在ActualHeight和ActualWidth屬性。如果你想讓你的控件具有固定的大小,你應該設置MinWidth和MinHeight,但大多數時候我不推薦這樣做。主要是所有這些都是爲了解決我們在Windows應用程序中遇到的調整問題。 – Carlo 2009-05-19 17:20:55

2

我在我的應用程序中遇到了同樣的問題。最後,我更改了代碼,以便切換CollapsedVisible之間的內容的可見性,並將Grid替換爲StackPanel

我一般發現MS控件模板樣本的質量很不錯,但是這個錯誤有點令人沮喪。

1

DesiredHeight來自內容元素,它是一個有效的綁定。我認爲你的綁定不能解決的原因是因爲DesiredHeight依賴於Height屬性,並且你沒有在你的模板中設置一個固定高度,所以它的計算結果爲Double.Nan

4

我已經遇到了這個問題。沿着user275587的說法,他們的示例工作,因爲觸發器刪除RowDefination上的Heigth =「0」。

所以我切換高度設置/觸發器邏輯,所以RowDefination沒有身高設定

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Name="ContentRow" /> 
</Grid.RowDefinitions> 
... 
<ControlTemplate.Triggers> 
    <Trigger Property="IsExpanded" Value="False"> 
      <Setter TargetName="ContentRow" Property="Height" Value="0" /> 
    </Trigger> 
</ControlTemplate.Triggers> 
2

同樣的問題,而是由卡羅接受的解決方案不能很好地工作。 海報面臨哪些問題就沒有了,但擴展部分breaks-

,如果你有一些內容,這就需要在一個已經擴展擴展擴展,它不會與綁定到DesiredSize.Height這樣做,您需要DesiredHeight - 可能是由於user275587給出的原因。

2

試試吧。

<Setter 
    TargetName="content" 
    Property="Height" 
    Value="{Binding ElementName=content, Path=DesiredHeight}" 
/> 
    ↓ 
<Setter TargetName="content" Property="Height" Value="NaN"/> 

綁定是不必要的。

2

有同樣的問題。在自定義ComboBox中使用自定義Expander。 以上都不是我的工作,綁定到Height打破了Expander的功能,使用StackPanel也打破了每個組的項目顯示。我發現:

<Setter TargetName="ContentRow" Property="Height" Value="Auto"/>