2015-08-17 51 views
0

我使用畫布產生我的擴展器在其下方的元素上的懸停效果,並將其寬度限制在擴展器的寬度上。然而,我只注意到(當我改變語言)時,其中一個元素是一個長字符串,當它可見時,它會將其寬度提供給父級(擴展器),否則不會。獲取兒童的最寬的孩子的ActualWidth

<Canvas Width="{Binding ActualWidth, ElementName=TheExpander}"> 
    <Expander Name="TheExpander" ...> 
    <ListBox ... > 
     <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox ... /> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    </Expander> 
</Canvas> 

有任何相對容易方式做到這一點?如果正確的解決方案要求我重新構建標記,我相信我會更喜歡簡單地將畫布的寬度設置爲醜陋,討厭和打耳恭振的方式,即硬-coded。

回答

0

你應該差不多從來沒有硬碼寬度和高度。讓WPF佈局引擎找出它。這就是它的目的。像StackPanel等東西會根據需要增長。

+0

我同意我應該**幾乎**從不這樣做。我更喜歡寬度最寬的孩子提供的寬度,但在這裏它不會發生,直到孩子在擴張器打開時實際可見。我需要使用畫布,因爲我需要通過將它放在z-index中獲得懸停效果。建議? –

+0

您是否想製作一個工具提示類型的東西?發佈你想要完成的內容的屏幕截圖,然後我可能會有更好的建議,但根據我現在的信息:),我會建議一個工具提示或彈出控件,並假如它來自擴展器,如果你需要它們點擊一個按鈕來激活它。 – SledgeHammer

+0

我相信,當我做出選擇時,以前已經很好地討論了要使用的組件的實際選擇。截圖和更多的信息是[在這裏](http://stackoverflow.com/questions/28362036/how-to-bind-to-a-controls-actually-actual-width-including-its-margins)。由於許多因素,我會被卡在畫布上,但我試圖避免硬編碼的寬度。當我改變語言時,最寬的孩子比擴展者的文本更寬。有沒有什麼辦法讓實際寬度成爲實際寬度**來**? –