2013-07-04 75 views
1

我有一個網格,我用一個TextBlock和另一個網格來填充,它最初是隱藏的。因爲我有TextBlock來響應點擊事件,所以我只希望在用戶點擊文本本身而不是網格中的任何位置時調用該方法。這是我的代碼看起來像現在:自動調整TextBlock長度到字符長度(在網格中)

<Grid x:Name="LayoutRoot" Height="25"> 
    <TextBlock x:Name="NewLabelButton" Text="Add New" Width="Auto" Foreground="Blue" TextDecorations="Underline" MouseLeftButtonUp="AddNew_OnClick" VerticalAlignment="Center"/> 
    <Grid x:Name="NewLabelPanel" Visibility="Collapsed"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <TextBox x:Name="NameBox" TextChanged="NameBox_OnTextChanged" KeyDown="NameBox_OnKeyDown" Grid.Column="0"/> 
     <Button x:Name="OKButton" Content="OK" Click="OKButton_OnClick" IsEnabled="False" Margin="2,0,0,0" Grid.Column="1"/> 
     <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_OnClick" Margin="2,0,0,0" Grid.Column="2"/> 
    </Grid> 
</Grid> 

導致TextBlock的跨越電網的整個寬度,使得它從本質上電網的任何地方點擊。我想要的僅僅是顯示文本所需的寬度(可能會有所不同,所以我不能使用靜態寬度)。

使用StackPanel而不是網格解決了TextBlock寬度問題,但是子網格不擴展以填充需要的整個StackPanel。

在StackPanel中封裝TextBlock的工作,但我想知道是否有一個更好的(和更有效的)的方式來做到這一點。

<Grid x:Name="LayoutRoot" Height="25"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock x:Name="NewLabelButton" Text="Add New" Foreground="Blue" TextDecorations="Underline" MouseLeftButtonUp="AddNew_OnClick" VerticalAlignment="Center"/> 
    </StackPanel> 
    <Grid x:Name="NewLabelPanel" Visibility="Collapsed"> 

所以我的問題是:有沒有更好的方式來做到這一點比我小的StackPanel黑客,或者是唯一的出路?謝謝!

回答

1

嘗試將TextBlockHorizontalAlignment設置在網格的左側。

<TextBlock x:Name="NewLabelButton" HorizontalAlignment="Left" Text="Add New" Width="Auto" Foreground="Blue" TextDecorations="Underline" MouseLeftButtonUp="AddNew_OnClick" VerticalAlignment="Center"/> 
+0

太棒了!像魅力一樣工作。謝謝! – mightimaus