2013-07-04 3 views
1

TextBlock과 다른 Grid로 채워진 Grid가 있는데, 처음에는 숨겨져 있습니다. 클릭 이벤트에 응답하는 TextBlock이 있으므로 사용자가 Grid에서 클릭하지 않고 텍스트 자체를 클릭 할 때만 메소드를 호출하면됩니다. 이것은 내 코드는 지금 모습입니다 : 기본적으로 어디에서나 그리드에서 그것을 클릭하고, 그리드의 전체 폭에 걸쳐 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> 

. 내가 원했던 것은 텍스트를 표시하는 데 필요한만큼 넓어야한다는 것입니다 (다를 수 있으므로 정적 너비를 사용할 수 없습니다).

Grid 대신 StackPanel을 사용하면 TextBlock 너비 문제가 해결되지만 자식 Grid가 확장되어 전체 StackPanel을 채울 필요가 없습니다.

StackPanel에서 TextBlock을 캡슐화하는 것이 효과적이지만 더 효율적인 방법이 있는지 궁금합니다. 내 작은 StackPanel에 해킹보다이 작업을 수행 할 수있는 더 나은 방법이 있나요, 또는 유일한 방법이다 :

<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"> 

그래서 제 질문은 이것이다? 감사!

답변

1

TextBlock의 을 눈금 왼쪽으로 설정해보십시오.

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

브릴리언트! 매력처럼 일했습니다. 감사! – mightimaus

관련 문제