2014-01-22 37 views
0

我有一個網格,我希望一個彈出窗口顯示在一個常數的關係,無論彈出窗口和網格的大小。我用一個轉換器,它這裏是代碼如何綁定到彈出ActualHeight

< Grid Name=YParamTextBlock> 
     <TextBlock HorizontalAlignment="Center"/> 
     <Popup PlacementTarget="{Binding ElementName=YParamTextBlock}} Placement="Center"> 
      <Popup.VerticalOffSet> 
        <MultiBinding Mode="OneWay" Converter="{StaticResource OffsetConverter} NotifyOnTargetChanged="True"> 
         <Binding Mode="OneWay" ElementName="YParamTextBlock" Path="ActualHeight" NotifyOnTargetUpdated="True"/> 
         <Binding Mode="OneWay" RelativeSource={RelativeSource Self} Path="ActualHeight" NotifyOnTargetChanged="True"/> 
        </MultiBinding> 
       </Popup.VerticalOffset> 
     </Popup> 
    <Grid> 

的問題是,實際高度是兩個控件0.0首先創建時,所以我加了NotifyOnTargetChanged,以解決它。 現在,由於某種原因,NotifyOnTargetChanged修復了Grid的ActualHeight重新綁定,但Popup仍然爲0.0。無論如何要通知彈出的實際高度已更改?或者對於這個問題的其他解決方案?

+0

對不起,我把它寫在我的智能手機上。如果有人會編輯我的問題,以正確顯示代碼,我將不勝感激。 – gilmishal

回答

0

實際高度和寬度read-only你不能直接綁定,您可以使用由肯特Bo​​ogaart解釋解決這個Answer

+0

我並非試圖改變身高,我試圖去獲得它.. – gilmishal

+0

發佈一些您的代碼,如果你可以 –

+0

我做了,由於某種原因,它看起來像這樣...我用我的智能手機來寫這篇文章,並以此方式形成...我需要有人用電腦來編輯它.. – gilmishal

0

爲什麼multibinding? VerticalOffset是一個雙精度值,所以你只需要一個綁定值。

我不知道你的Converter是做什麼的,但是假設你想讓它接受YParamTextBlock網格的ActualHeight屬性,然後返回一個對應於你想給彈出的VerticalOffset的double,那麼下面的內容可能更容易跟隨:

<Grid x:Name="YParamTextBlock"> 
     <TextBlock HorizontalAlignment="Center"/> 
     <Popup PlacementTarget="{Binding ElementName=YParamTextBlock}} 
       Placement="Center" 
       VerticalOffset="{Binding ActualHeight, ElementName=YParamTextBlock, 
           Converter={StaticResource OffsetConverter}}"/> 

<Grid> 
+0

我需要多重綁定的原因是因爲偏移量是heightOfGrid/2 + heightOfPopup/2我想把它放在網格的底部中心 – gilmishal

+0

不管怎樣,popup的實際高度仍然是0.0 – gilmishal