Member 12540636 Ответов: 0

Как изменить размер шрифта в ячейке datagrid, чтобы он соответствовал ячейке?


В этом примере у меня есть простая таблица данных с заголовками, 3 столбцами и 2 строками данных. Привязан к datatable 1 (dt1).
То, что я хочу сделать, - это настроить размер шрифта каждой ячейки, чтобы заполнить ширину ячейки.
Нет переноса слов или использования viewbox, так как они не подходят для общего применения.

Я использовал viewbox в последнем столбце, чтобы продемонстрировать поведение viewbox, которое я хочу избежать. Это уменьшает площадь текстового поля в ячейке, что означает, что вы должны нажать именно на текст, чтобы отредактировать ячейку.

Поведение, которое я ищу, состоит в том, чтобы настроить размер шрифта (не имеет значения, насколько он мал, поскольку в окончательной реализации пользователь может настроить ширину столбца и таким образом увеличить шрифт до читаемого размера), чтобы соответствовать ширине ячейки на одной строке.

Размер шрифта просто должен соответствовать ширине ячейки, чтобы поместиться в ячейку, независимо от того, насколько маленьким может стать шрифт.

Спасибо, Тони.

<Window x:Class="ExamlpeForForum.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:ExamlpeForForum"

        mc:Ignorable="d"

        Title="MainWindow" Height="450" Width="800">
    <Grid>


        

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
        
        <DataGrid x:Name="dataGrid1" Grid.Column="2" Grid.ColumnSpan="6" Grid.Row="2" Grid.RowSpan="6" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeColumns="True" CanUserDeleteRows="False" ScrollViewer.CanContentScroll="False" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Hidden" FontSize="12" RowHeaderWidth="0" >
        <DataGrid.Columns >
            <DataGridTemplateColumn Header="Column0" Width="50*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Column0}" TextWrapping="Wrap" FontSize="12"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Column1" Width="50*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Column1}" TextWrapping="Wrap" FontSize="12"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Column2" Width="50*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Viewbox Stretch="Fill" StretchDirection="DownOnly">
                            <TextBox Text="{Binding Column2}" TextWrapping="Wrap" FontSize="12" />
                            </Viewbox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            
        </DataGrid.Columns>
            
                
        </DataGrid>

    </Grid>
</Window>

using System.Windows;
using System.Data;

namespace ExamlpeForForum
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
DataTable dt1 = new DataTable();

public MainWindow()
{
InitializeComponent();




//Build Data table1 Columns
dt1.Columns.Add("Column0");
dt1.Columns.Add("Column1");
dt1.Columns.Add("Column2");

//Populate Data Table1
dt1.Rows.Add();
dt1.Rows[0][0] = "1";
dt1.Rows[0][1] = "2";
dt1.Rows[0][2] = "3";
dt1.Rows.Add();
dt1.Rows[1][0] = "4";
dt1.Rows[1][1] = "5";
dt1.Rows[1][2] = "6";

dataGrid1.ItemsSource = dt1.DefaultView;

}
}
}


Что я уже пробовал:

Я пытался измерить ячейку и настроить шрифт , но у меня не было успеха.

Gerry Schmitz

Там нет автоматической "функции изменения размера шрифта" ... "окно просмотра" (на ячейку) - это именно то, что вам нужно, как вы его описываете. И все " 10*" являются избыточными; использование только "*" в этом случае выполняет то же самое.

Member 12540636

Спасибо за ваш ответ, Джерри. И да, я заменил 10* на просто *.
Я также обновил вопрос, чтобы более полно объяснить, чего я пытаюсь достичь, поле просмотра очень близко к тому, что мне нужно, но уменьшает размер текстового поля и при этом уменьшает область для нажатия. Я дал column3 окно просмотра, чтобы продемонстрировать, чего я пытаюсь избежать.

0 Ответов