2017-07-05 161 views
-1

XAML文件中定義的畫布形狀座標時,是有可能做這樣的事情:座標在WPF畫布

<Canvas x:Name="myCanvas" 
     DockPanel.Dock="Bottom" 
     VerticalAlignment="Stretch"> 

    <Canvas.Background> 
     <SolidColorBrush Color="White" Opacity="100" /> 
    </Canvas.Background> 

    <Ellipse x:Name="ell1" 
       Width="30" 
       Height="30" 
       Stroke="Black" 
       StrokeThickness="1" 
       Fill="Red" 
       Canvas.Left="100" 
       Canvas.Top="50" /> 

    <Ellipse x:Name="ell2" 
       Width="30" 
       Height="30" 
       Stroke="Black" 
       StrokeThickness="1" 
       Fill="Red" 
       Canvas.Right="100" 
       Canvas.Top="50" /> 

    <Line Stroke="Black" 
      StrokeThickness="1" 
      X1="ell1.Canvas.Right"        *** look here *** 
      Y1="ell1.Canvas.Top + ell1.Height/2"    *** look here *** 
      X2="ell2.Canvas.Left"        *** look here *** 
      Y2="ell2.Canvas.Top + ell2.Height/2" />    *** look here *** 

</Canvas> 

或做它是通過C#的唯一途徑?

感謝, 馬西莫

+0

是的,但在C#中。在XAML中沒有辦法做到這一點? – user1738687

+0

您可能可以使用MultiBindings和適當的綁定轉換器來綁定屬性,但請注意''Canvas.Right'沒有設置在'ell1'上,'Canvas.Left'不在'ell2'上,所以它們的值是'NaN' 。您應該使用您設置的屬性並根據需要添加/減去橢圓寬度 – Clemens

+1

作爲說明,不透明度是介於0和1之間的雙倍值,所以您應該設置「不透明度=」1「'。但是,無論如何,這是默認設置,所以您不需要根本設置SolidColorBrush的不透明度。更簡單,設置'' – Clemens

回答

0

你的確可以綁定到一個像這樣的附加屬性:

<Line ... X2="{Binding Path=(Canvas.Left), ElementName=ell1}" /> 

但在XAML中沒有定義+/運營商,所以你將不得不編寫一些代碼才能將Y1屬性設置爲50 + 30/2

畢竟XAML是標記語言和C#是一種編程語言。

+0

@ user1738687:請記住投票了有用的答案:) https://stackoverflow.com/help/privileges/vote-up – mm8

0

這應該沒有產生太多的麻煩所期望的結果。您可能需要調整網格的邊距。

<Grid DockPanel.Dock="Bottom" Margin="100,50"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 

    <Ellipse Grid.Column="0" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Ellipse Grid.Column="2" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Rectangle Grid.Column="1" Fill="Black" Height="1"/> 
</Grid> 

這是更簡單:

<DockPanel DockPanel.Dock="Bottom" Margin="100,50"> 

    <Ellipse DockPanel.Dock="Left" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Ellipse DockPanel.Dock="Right" Grid.Column="2" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Rectangle Fill="Black" Height="1"/> 
</DockPanel>