2016-06-23 3 views
0

는 팀 이름에 대한 특정 모양을 원하고 점수 :Viewbox의 ColumnDefinition.Width가 Auto로 설정되어 있습니까? 나는 클라이언트를 구축 있어요 점수 판 앱

enter image description here

내가 UI에 다양한 장소에서 다음을 사용할 필요가 있기 때문에, 나는 '생각 UserControl로 래핑하십시오. 여기에 (크게 실제에서 단순화 된) 위의 이미지에 대한 XAML의 :

,이 질문의 목적을 위해,주의하는 것이 중요 무엇
<UserControl x:Class="Scoreboard.TeamNameAndScoreControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Scoreboard" 
      mc:Ignorable="d" 
      d:DesignHeight="30" d:DesignWidth="100"> 
    <Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="5*"/> 
     <ColumnDefinition Width="2*"/> 
    </Grid.ColumnDefinitions> 
    <Label 
     Name="TeamName" 
     BorderBrush="AliceBlue" 
     BorderThickness="1" 
     Content="WEST" 
     FontSize="20" 
     Padding="0" 
     Background="Gray" 
     FontWeight="Bold" 
     HorizontalContentAlignment="Center" 
     /> 
    <Label 
     Name="Score" 
     BorderBrush="AliceBlue" 
     BorderThickness="1" 
     Content="2" 
      Grid.Column="1" 
     Padding="0" 
     Background="White" 
     FontSize="20" 
     FontWeight="Bold" 
     HorizontalContentAlignment="Center" 
     /> 
    </Grid> 
</UserControl> 

그 TeamName 및 점수의 5-2 비례 크기 조정 라벨이 중요합니다.

이 컨트롤을 사용하려는 앱 UI 내의 일부 위치가 다르게 크기 때문에 창 크기 변경에 비례하여 응답하는 컨트롤이 필요하기 때문에 Viewbox에서 그리드를 래핑하는 것으로 생각했습니다 :

<UserControl x:Class="Scoreboard.TeamNameAndScoreControl" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
       xmlns:local="clr-namespace:Scoreboard" 
       mc:Ignorable="d" 
       d:DesignHeight="30" d:DesignWidth="100"> 
    <Viewbox> 
    <Grid> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="5*"/> 
     <ColumnDefinition Width="2*"/> 
     </Grid.ColumnDefinitions> 
     <Label 
      BorderBrush="AliceBlue" 
      BorderThickness="1" 
      Content="WEST" 
      FontSize="20" 
      Padding="0" 
      Background="Gray" 
      FontWeight="Bold" 
      HorizontalContentAlignment="Center" 
      /> 
     <Label 
      BorderBrush="AliceBlue" 
      BorderThickness="1" 
      Content="2" 
       Grid.Column="1" 
      Padding="0" 
      Background="White" 
      FontSize="20" 
      FontWeight="Bold" 
      HorizontalContentAlignment="Center" 
      /> 
    </Grid> 
    </Viewbox> 
</UserControl> 

문제 뷰 박스로 포장 할 때 결과는 다음과 같습니다 있도록 그리드가 효과적으로 "자동"으로 ColumnDefinition.Width 값을 변환하는 것이다 :

enter image description here

Viewbox.Stretch 및 Viewbox.StretchDirection 속성의 가능한 모든 조합을 시도했지만 모양을 크게 변경했지만 Grid의 열 너비로 문제를 "수정"하지 않았습니다.

레이블의 HorizontalContentAlignment를 변경하면 아무 효과가없는 것 같습니다.

나는 SharedSizeGroup 속성하지만 기쁨 설정 설정을 시도했다 : 내가 대신 뷰 박스에있는 각 레이블을 래핑하는 구조 조정을 시도했다

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="5*" SharedSizeGroup="A"/> 
    <ColumnDefinition Width="2*" SharedSizeGroup="A"/> 
</Grid.ColumnDefinitions> 

을하지만, Viewboxes가 만드는 격자 세포를 기입하지 그냥 이상한 모양 :

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="5*"/> 
    <ColumnDefinition Width="2*"/> 
    </Grid.ColumnDefinitions> 
    <Viewbox> 
    <Label 
      BorderBrush="AliceBlue" 
      BorderThickness="1" 
      Content="WEST" 
      FontSize="20" 
      Padding="0" 
      Background="Gray" 
      FontWeight="Bold" 
      HorizontalContentAlignment="Center" 
      /> 
    </Viewbox> 
    <Viewbox Grid.Column="1"> 
    <Label 
      BorderBrush="AliceBlue" 
      BorderThickness="1" 
      Content="2" 
      Padding="0" 
      Background="White" 
      FontSize="20" 
      FontWeight="Bold" 
      HorizontalContentAlignment="Center" 
      /> 
    </Viewbox> 
</Grid> 

enter image description here

크게 SI 여기에 표시된 이미지와 XAML이 된 것을 다시 유의하시기 바랍니다 이 질문의 목적을 달성하기 위해 실제로 각 레이블의 테두리, 배경 및 글꼴의 모양을 향상시키는 광범위한 스타일 집합을 포함합니다. 요점은, 불행히도 수정 그리드 (또는 그와 비슷한)의 배경을 설정하는 것처럼 간단합니다되지 않습니다.

내 ColumnDefinition.Width 값이 Auto로 변경된 이유는 무엇입니까? 그리고 어떻게 해결할 수 있습니까?

답변

0

나는 그것을 대부분 알아 냈습니다. 이제

<UserControl x:Class="Scoreboard.TeamNameAndScoreControl" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
       xmlns:local="clr-namespace:Scoreboard" 
       mc:Ignorable="d" 
       d:DesignHeight="30" d:DesignWidth="100"> 
    <Viewbox> 
    <Grid Width="100" Height="30"> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="5*"/> 
     <ColumnDefinition Width="2*"/> 
     </Grid.ColumnDefinitions> 
     <Label 
      BorderBrush="AliceBlue" 
      BorderThickness="1" 
      Content="WEST" 
      FontSize="20" 
      Padding="0" 
      Background="Gray" 
      FontWeight="Bold" 
      HorizontalContentAlignment="Center" 
      /> 
     <Label 
      BorderBrush="AliceBlue" 
      BorderThickness="1" 
      Content="2" 
      Grid.Column="1" 
      Padding="0" 
      Background="White" 
      FontSize="20" 
      FontWeight="Bold" 
      HorizontalContentAlignment="Center" 
      /> 
    </Grid> 
    </Viewbox> 
</UserControl> 

enter image description here

:

내가 수동으로 같은 크기로 (자식에서 크기 소요) 뷰 박스를 강제 그리드의 너비/높이를 설정하는 데 필요한 Grid는 내가 할당 한 5 */2 * 열 너비를 존중합니다.

이 변경을하기 전에 그리드가 실제로 얼마나 큰지 전혀 알지 못했습니다 (이후 Viewbox를 추가하면 Grid가 크기를 지정하는 부모를 가지기 때문에 UserControl - 자녀에게서 크기를 얻는 부모에게). 따라서 이러한 상황에서 각 셀을 자식 (즉, "자동"크기 조정)으로 감싸는 (크기 결정) 단계로 결정하기 만하면됩니다.