2011-06-15 75 views
1

我必須在位圖下顯示幾個字符串。一次最多可以顯示5個字符串,並不總是顯示所有5個字符串。此外,字符串的長度也會有所不同。無論如何,我希望在位圖下以一種視覺上吸引人的方式顯示這些字符串。就像,如果只是一個字符串,我想把它放在位圖的中心。如果是2個字符串,我想將字符串間隔很好,並將其置於位圖之下,等等。 我只知道在運行時顯示的字符串,顯示的字符串數量(最小1和最大5)以及字符串的長度。WPF:將GRID內容與位圖對齊

我寫了下面的XAML代碼,但是我無法很好地爲所有我的條件定位字符串。 Bitmap1是一個圓形,bitmap2是左箭頭,而bitmap3是右箭頭。

有人可以幫我嗎?

<Grid x:Name="Graphics" Grid.Column="1" Background="Black"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="0.319*"/> 
      <RowDefinition Height="0.56*"/> 
      <RowDefinition Height="0.321*"/> 
     </Grid.RowDefinitions> 
     <Image Height="72" Source="/DataBinding;component/Bitmap1.bmp" Stretch="Fill" Width="108" Grid.Row="1" /> 
     <Grid Grid.Row="1"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="0.408*"/> 
       <ColumnDefinition Width="0.15*"/> 
       <ColumnDefinition Width="0.408*"/> 
      </Grid.ColumnDefinitions> 
      <Image x:Name="Next" Height="48" Width="48" Grid.Column="2" Source="/DataBinding;component/Bitmap3.bmp" HorizontalAlignment="Left" /> 
      <Image x:Name="Prev" Width="48" Height="48" Grid.Column="0" Source="/DataBinding;component/Bitmap2.bmp" HorizontalAlignment="Right"/> 

      <Grid HorizontalAlignment="Center" ShowGridLines="True" Width="Auto" Grid.ColumnSpan="3" Margin="38,69,41,-40"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Visibility="Visible" Text="String1" Padding="10" Grid.Column="0" FontSize="14.667" TextAlignment="Center" Foreground="White" /> 
       <TextBlock Visibility="Visible" Text="String2" Padding="10" Grid.Column="1" FontSize="14.667" TextAlignment="Center" Foreground="White" /> 
       <TextBlock Visibility="Visible" Text="String3" Padding="10" Grid.Column="2" FontSize="14.667" TextAlignment="Center" Foreground="White" /> 
       <TextBlock Visibility="Visible" Text="String4" Padding="10" Grid.Column="3" FontSize="14.667" TextAlignment="Center" Foreground="White" /> 
       <TextBlock Visibility="Visible" Text="String5" Padding="10" Grid.Column="4" FontSize="14.667" TextAlignment="Center" Foreground="White" /> 
      </Grid> 
     </Grid> 
    </Grid> 

回答

0

你想要做的是通過創建基於面板上的自定義控件創建自定義面板。重寫ArrangeOverride,然後將事物放在你想要的地方,就好像你有一個可以使用的畫布一樣,因爲當你重寫ArrangeOverride時,你的面板就像是一個畫布。網格是一個自定義面板本身:-)

+0

嗯,我沒有嘗試創建一個自定義面板。我通過在Grid內使用StackPanel解決了我的問題。下面給出了修改的XAML。另外我在TextBlock裏面運行,這樣我就可以控制每個單詞的格式(這在我的情況下是需要的)。 – Mohanr 2011-06-22 13:30:53

+0

StackPanel也是自定義面板的一種形式。我不認爲這似乎足以滿足你想要的東西,但它很棒。 – 2011-06-22 17:06:20

0

  <StackPanel Name="stack1" Orientation="Horizontal" Width="Auto" Background="Red" > 
       <TextBlock FontSize="14.667" Width="Auto" TextAlignment="Center"> 
           <Run x:Name="String1" Text="String1" /> 
           <Run x:Name="String2" Text="String2" /> 
       <Run x:Name="String3" Text="String3" /> 
       <Run x:Name="String4" Text="String4" /> 
       <Run x:Name="String5" Text="String5" /> 

      </TextBlock> 
      </StackPanel> 
     </Grid> 
    </Grid>