내 사용자 정의 컨트롤이 레이아웃 프로세스 중에 HorizontalAlignment 또는 VerticalAlignment을 따르지 않는 것 같습니다. 다음과 같이내 UserControl의 크기가 0 인 이유는 무엇입니까?
나는 정의 된 윈도우 스토어 XAML 사용자 컨트롤이 있습니다
다음과 같이이 ItemsControl에 수평 목록에<UserControl
x:Class="IWalker.Views.PDFPageUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:IWalker.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="200"
d:DesignWidth="250">
<Image x:Name="ThumbImage"/>
</UserControl>
(필자는 페이지 XAML은 간결의 상단에 DECL 하락했다 - 그러나 그것은이다) Windows 스토어 빈 템플릿 :. 당신이 볼 수 있듯이
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ScrollViewer VerticalScrollMode="Disabled" HorizontalScrollMode="Auto" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
<ItemsControl x:Name="SlideStrip">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:PDFPageUserControl Margin="0 0 5 0" Height="{Binding Path=ActualHeight, ElementName=SlideStrip, Mode=OneWay}" ViewModel="{Binding}" RespectRenderingDimension="Vertical" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
, PDFPageUserControl는 ItemsControl에의의 ActualHeight에 바인딩의 높이가에 앉아있을 것입니다있다 이러한 상황이 발생하면, 모든 것이 잘 작동합니다. 그 바인딩을 제거하면 내 사용자 정의 컨트롤은 크기가 0,0입니다.
여기 까다로운 부분이 있습니다. PDFPageUserControl에는 암시 적 크기가 없습니다. Height, Width 또는 둘 다를 설정해야합니다 (위 코드에서 볼 수 있듯이). 그런 다음 PDF 렌더링 코드를 사용하여 올바른 크기의 이미지를 생성하고 표시합니다 (이 모든 기능이 작동합니다).
내 이론은 Windows Store XAML의 자동 레이아웃이 기본적으로 해당 항목이 적합 할 때까지 확장을 시도하지 않는다는 것입니다. 대부분의 컨트롤이 자신의 크기를 결정하고이를 레이아웃 엔진에보고합니다. 그런 다음 레이아웃 엔진이 주변의 레이아웃을 작성하여 구축합니다. Mine은 처음에는 0,0이라고보고하고, 높이를 알기를 기다리면서 시스템에 너비를 알려주거나 그 반대로 알려줍니다. ItemsControl의 StackPannel이 항목이 내부에 맞게 늘리도록 강제하지 않으므로 발생하지 않습니다.
그러나 여기에서는 Grid 나 ScrollViewer와 같이 사용 가능한 모든 공간을 채우기 위해 일부 컨트롤을 확장 할 수 있습니다. 가로 및 세로 맞춤을위한 "늘이기"모드는 레이아웃 엔진에서 사용자를 위해 수행 할 것이라고 생각했습니다. 하지만 그것은 내 UserControl에 대해 작동하지 않는 것처럼 보입니다. 마치 레이아웃 프로세스에 제대로 참여하지 않는 것처럼 말입니다.
내 컨트롤을 수정하여 HorizontalAlignment 및 VerticalAlignment에 따라 사용 가능한 공간을 채우도록 스트레칭 할 수있는 방법이 있습니까?
기본 누락 된 정보/코드가 있으면 여기에 질문하십시오. 물론 추가하겠습니다. 수동으로 업데이트해야합니다 그래서, 변경 알림을 발생시키지 않습니다 - WinRT/XAML에서
작전, 네, 맞습니다. 나는 더 튼튼하기 위해 SizeChanged까지 그걸 갈거야. 나는 실제 높이가 옳다는 것을 구속 할 때 운이 좋았을 것입니다. 하지만 여전히 기본적인 질문에 대답하지 않습니다 : 왜이 사람은 레이아웃에 참여하지 않습니다. – Gordon