>

파일 이름과 경로가 TextBlock 에 맞지 않으면 줄임표를 표시하고 싶습니다 .

예를 들어, 파일 이름과 경로가 다음과 같은 경우 :

C:\examples\example\folderA\folderB\folderC\myfilename.txt

TextBlock 에 보여주고 싶다  이렇게 :

C:\examples...myfilename.txt

업데이트 : TextTrimming 를 사용할 수 있다는 것을 알고 있습니다  끝에 줄임표를 설정합니다. 하지만 어딘가에 줄임표를 설정하는 방법이 필요합니다.


  • 답변 # 1

    좋아, 이것이 기본 XAML로만 할 수 있고 측정이나 그림으로 엉망이되지 않도록 관심이 있었기 때문에 엉망이되었습니다. 오늘이 일을 마칠 시간이 없지만, 문제를 해결하고 남은 문제를 해결하려면 시작점으로 공유하겠다고 생각했습니다.

    XAML은 지금까지 다음과 같습니다 :

    <Window.Resources>
        <local:FileNameConverter x:Key="FileNameConverter" />
        <local:FilePathConverter x:Key="FilePathConverter" />
        <Style x:Key="CustomFileText" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="false">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="TextBox">
                                <Grid>
                                    <TextBox IsHitTestVisible="False" /> <!-- for Border -->
                                    <DockPanel>
                                        <TextBlock Text="{TemplateBinding Text, Converter={StaticResource FileNameConverter}}" DockPanel.Dock="Right" Margin="-3,3,4,3" />
                                        <TextBlock Text="{TemplateBinding Text, Converter={StaticResource FilePathConverter}}" TextTrimming="CharacterEllipsis" Margin="4,3,0,3" />
                                    </DockPanel>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <StackPanel Margin="10">
        <TextBox Text="C:\Program Files\Some Directory\SomeFile.txt" Style="{StaticResource CustomFileText}"/>
        <TextBox Margin="0,10" />
    </StackPanel>
    
    

    결국 TextBox에 편집에 초점이 있으면 일반 TextBox로 표시됩니다.

    그러나 사용자가 양식의 다른 곳으로 포커스를 이동하면 변환기를 사용하여 Directory와 FileName을 구문 분석하는 두 개의 별도 TextBlock으로 분할됩니다. TextTrimming은 디렉토리에서 질문에 설명 된 효과를주기 위해 사용됩니다 :

    이 문제의 주요 문제는 크기를 조정할 때 두 개의 텍스트 상자 사이에 여분의 공간이 추가된다는 것입니다.

    내가 생각할 수있는 두 가지 옵션이 있습니다 :

    <올>

    " TextBox.DesiredSize.Width > TextBox.ActualWidth 인 경우에만이 템플릿을 사용하는 일종의 트리거를 기반으로 템플릿을 만듭니다. "

    템플릿에서 XAML을 변경하여 이름 텍스트 상자에라고 표시하십시오. "필요한 모든 공간을 최소 크기로 가져갑니다. 추가 공간이 있으면이 상자에도 할당하십시오""가능한 모든 공간을 차지하지만 내용보다 커지지는 않습니다"라고 표시되어 있습니다. 이 작업을 수행하는 가장 좋은 방법은 확실하지 않지만 다른 패널, 현재 생각할 수없는 TextBox의 일부 속성 또는 크기를 제한하는 사용자 정의 변환기/바인딩과 관련이 있다고 생각합니다.

    1 번 구현이 더 쉬울 것 같지만 지금 알아낼 시간이 없습니다. 이것이 좋은 출발점이 되길 바랍니다. 행운을 빌어 요! :)

    아, 그리고 변환기는 매우 기본적이었습니다. 더 많은 보호 장치를 추가하고 싶겠지 만 테스트에 사용했던 내용은 다음과 같습니다.

    public class FileNameConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null && value is string)
                return System.IO.Path.GetFileName((string)value);
            return null;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    public class FilePathConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null && value is string)
                return System.IO.Path.GetDirectoryName((string)value);
            return null;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    
    

  • 답변 # 2

    창 크기에 나타나는 경로의 추가 공간을 수정하기 위해 Rachel이 제공 한 XAML을 수정했습니다.

       <Window.Resources>
        <local:FileNameConverter x:Key="FileNameConverter" />
        <local:FilePathConverter x:Key="FilePathConverter" />
        <Style x:Key="CustomFileText" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="false">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="TextBox">
                                <Grid>
                                    <TextBox Grid.ColumnSpan="2" IsHitTestVisible="False"/>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition MaxWidth="{Binding ActualWidth, ElementName=PART_DirMaxWidth}"/>
                                            <ColumnDefinition Width="Auto"/>
                                        </Grid.ColumnDefinitions>
                                        <Canvas x:Name="PART_Canvas">
                                            <TextBlock x:Name="PART_DirMaxWidth" Margin="0" Padding="0" Text="{TemplateBinding Text, Converter={StaticResource FilePathConverter}}" Visibility="Hidden"/>
                                            <TextBlock Width="{Binding ActualWidth, ElementName=PART_Canvas}" Margin="0" Padding="0" Text="{TemplateBinding Text, Converter={StaticResource FilePathConverter}}" TextTrimming="CharacterEllipsis" Background="Transparent"/>
                                        </Canvas>
                                        <StackPanel Grid.Column="1" Orientation="Horizontal">
                                            <TextBlock Margin="0" Padding="0" Text="\" Background="Transparent"/>
                                            <TextBlock Margin="0" Padding="0" Text="{TemplateBinding Text, Converter={StaticResource FileNameConverter}}" Background="Transparent"/>
                                        </StackPanel>
                                    </Grid>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    
    

  • 이전 java - goDaddy 인증서가있는 Tomcat85 SSL 커넥터
  • 다음 php - 배열에서 쌍의 조합 생성 (abc-> ab - bc : ca 또는 ac : ba : cb)