2011-07-05 58 views
10

Tôi đang cố gắng để có được một TextBox để điền vào không gian có sẵn trong một cột có thể thay đổi kích thước. TextBox là một phần của một điều khiển người dùng:Làm thế nào để có được một TextBox để điền vào một cột có thể thay đổi kích thước?

<UserControl x:Class="TextBoxLayout.FieldControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Label Grid.Column="0">Name</Label> 
     <TextBox Grid.Column="1"/> 
    </Grid> 
</UserControl> 

điều khiển người dùng này là trong một cửa sổ với một splitter dọc:

<Window x:Class="TextBoxLayout.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:TextBoxLayout" 
    Title="Text box layout" Height="400" Width="600"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition MinWidth="100"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition MinWidth="100"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 

     <local:FieldControl Grid.Column="0" Grid.Row="0" MaxWidth="200" HorizontalAlignment="Left"/> 

     <TextBlock Grid.Column="0" Grid.Row="1" Text="Testing"/> 

     <GridSplitter Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="3"/> 

     <TextBlock Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" Text="Testing"/> 
    </Grid> 
</Window> 

Vấn đề là hộp văn bản dường như là rất hẹp - Những gì tôi muốn muốn nó làm là điền vào cột bên trái và thay đổi kích thước với splitter. Làm thế nào để làm điều đó?

+0

Bạn có nghĩa là vừa với chiều rộng hoặc cả chiều rộng và chiều cao? – Alex

+0

Vừa với chiều rộng. – imekon

Trả lời

29

Sử dụng HorizontalAlignment = "Stretch" thay vì "Left" cho FieldControl. Xóa MaxWidth nếu cần. Sử dụng TextAlignment để căn chỉnh văn bản.

+4

Điều đó có tác dụng nếu tôi không muốn có MaxWidth. Tuy nhiên ... nếu tôi thêm MaxWidth (vì cột trở nên rất rộng và tôi không muốn trường văn bản điền vào nó), thì FieldControl sẽ nổi ở giữa cột. Nếu tôi thêm lại HorizontalAlignment = "Left", thì tôi quay lại ngay nơi tôi đã bắt đầu. Làm thế nào để tôi có được một trường văn bản để căn chỉnh bên trái của một cột mà không cần điền nó, và đối phó với cột đang bị thu hẹp khi bạn kéo bộ tách? – imekon

+0

Tôi đồng ý với imekon. Câu trả lời này đưa bạn trở lại nơi bạn bắt đầu. – Vaccano

+0

@anivas +1 để phân biệt giữa HorizontalAlignment và TextAlignment và nhu cầu sử dụng cả hai. Tôi đã quên. –

1

chỉ xem là bạn muốn

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition MinWidth="100" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition MinWidth="100" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <local:FieldControl Grid.Column="0" 
         Grid.Row="0" 
         Margin="2" 
         /> 

    <TextBlock Grid.Column="0" 
       Grid.Row="1" 
       Text="Testing" /> 

    <GridSplitter Grid.Column="1" 
        Grid.Row="0" 
        Grid.RowSpan="2" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Width="3" /> 

    <TextBlock Grid.Column="2" 
       Grid.Row="0" 
       Grid.RowSpan="2" 
       Text="Testing" /> 
</Grid> 
1

Chỉ muốn thêm vào nhiều ví dụ cho các tìm kiếm đang trong tương lai.

tôi đặt này trong top của tập tin XAML:

<UserControl.Resources> 
    <Style TargetType="{x:Type TextBlock}" x:Key="CenterCell"> 
     <Setter Property="Background" Value="{Binding Included, Converter={StaticResource BoolToColorConverter}}"/> 
     <Setter Property="HorizontalAlignment" Value="Stretch"/> 
     <Setter Property="TextAlignment" Value="Center"/> 
    </Style> 
</UserControl.Resources> 

Và sau đó trong DataGrid:

<DataGridTextColumn Header="Excluded" Binding="{Binding Excluded}" ElementStyle="{StaticResource CenterCell}"/> 

này tập trung các văn bản và phân loại vẫn được kích hoạt. Hộp văn bản điền vào ô và trong trường hợp này được tô màu bằng công cụ chuyển đổi bool.

Các vấn đề liên quan