내가, 내가 외부 소스로 이동 높이 (100)의 Canvas
및 컨트롤의로드에서 폭 1920WPF ActualWidth 제로
이있는 사용자 제어 할 수 있습니다, 텍스트 파일을 다운로드에 TextBlock
들 추가 캔버스. 그런 다음 TextBlock
을 Canvas
에 추가 한 다음에 계산 목적으로 너비를 가져야하지만 ActualWidth
속성은 항상 0 인 경우를 제외하고는 잘 작동하는 선택 윤곽 스크롤 효과를 만들고 싶습니다.
private readonly LinkedList<TextBlock> textBlocks = new LinkedList<TextBlock>();
public LocalNewsControl()
{
Loaded += LocalNewsControlLoaded;
}
private void LocalNewsControlLoaded(object sender, RoutedEventArgs e)
{
LoadDataContext();
}
private void LoadDataContext()
{
DataContext = new NewsItemsViewModel((exception) => LoadNewsItems());
}
private void LoadNewsItems()
{
var viewModel = (NewsItemsViewModel)DataContext;
NewsCanvas.Children.Clear();
textBlocks.Clear();
foreach (var newsViewModel in viewModel.NewsItems)
{
var tb = new TextBlock
{
Text = newsViewModel.Headline,
FontSize = 28,
FontWeight = FontWeights.Normal,
Foreground = Brushes.Black
};
NewsCanvas.Children.Add(tb);
Canvas.SetTop(tb, 20);
Canvas.SetLeft(tb, -999);
textBlocks.AddLast(tb);
}
Dispatcher.BeginInvoke(new Action(() =>
{
var node = textBlocks.First;
while (node != null)
{
if (node.Previous != null)
{
//THIS IS WHERE ActualWidth is always ZERO
var left = Canvas.GetLeft(node.Previous.Value) + node.Previous.Value.ActualWidth + Gap;
Canvas.SetLeft(node.Value, left);
}
else
Canvas.SetLeft(node.Value, NewsCanvas.Width + Gap);
node = node.Next;
}
}));
}
TextBlock에 표시되지 않으며 ActualWidth 속성이 없으므로로드되지 않습니다. Itemscontrol과 비슷한 문제를 해결했지만 캔버스에 대해 잘 모르겠습니다. LayoutUpdated, SizeChanged 등과 같은 이벤트를 시도하십시오. – vorrtex