WPF- 사용자 정의 컨트롤의 동적 추가 및 BackgroundWorker 사용
15341 단어 WPF
그리고 다음과 같은 코드로 회전된 프리젠테이션 그림을 보여 줍니다.
<Grid Grid.Row="2" Grid.Column="1" Name="gNewBox" Margin="21,0,0,0" Visibility="Collapsed" >
<Grid.RowDefinitions>
<RowDefinition Height="106"/>
<RowDefinition Height="106"/>
<RowDefinition Height="106"/>
<RowDefinition Height="106"/>
Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
Grid.ColumnDefinitions>
Grid>
사용자 정의 컨트롤 백그라운드에서 동적 추가를 수행하기 때문에 레이아웃에 직접 추가하지 않았습니다. 동적 추가 코드는 다음과 같습니다.
public void ShowStruct()
{
var controls = new List();
controls.Clear();
gNewBox.Children.Clear();
var id = 1;
for (var i = 0; i < 6; i++)
{
for (var j = 0; j < 4; j++)
{
var bitkyPole = new Drawer.Drawer();
bitkyPole.Name = "drawer" + id;
bitkyPole.Width = 145;
bitkyPole.Height = 65;
// Grid
gNewBox.Children.Add(bitkyPole);
// Grid
Grid.SetRow(bitkyPole, 5 - i);
Grid.SetColumn(bitkyPole, j);
// ,
controls.Add(bitkyPole);
//
// bitkyPole.setContent(id);
id++;
}
}
}
그리고 기다리는 시간이 긴 label:
<Label Grid.Row="1" Grid.Column="1" Width="120" Height="40" VerticalAlignment="Top" HorizontalAlignment="Left" Content=" :" VerticalContentAlignment="Center" HorizontalContentAlignment="Center">Label>
<Label Grid.Row="1" Grid.Column="1" Width="120" Height="40" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="130,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Name="lab_pro">Label>
그런 다음 BackgroundWorker를 구현합니다. 코드는 다음과 같습니다.
BackgroundWorker bgWl;
private void btnLoading_Click(object sender, RoutedEventArgs e)
{
bgWl = new BackgroundWorker();
bgWl.WorkerReportsProgress = true;
bgWl.DoWork += new DoWorkEventHandler(bgWl_DoWork);
bgWl.ProgressChanged += new ProgressChangedEventHandler(bgWl_ProgressChanged);
bgWl.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWl_RunWorkerCompleted);
bgWl.RunWorkerAsync();
}
void bgWl_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
cavLoading.Visibility = System.Windows.Visibility.Collapsed;
gNewBox.Visibility = System.Windows.Visibility.Visible;
this.Dispatcher.Invoke(new Action(() =>
{
this.lab_pro.Content = " ";
}));
}
void bgWl_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.Dispatcher.Invoke(new Action(() =>
{
this.lab_pro.Content = e.ProgressPercentage;
}));
}
void bgWl_DoWork(object sender, DoWorkEventArgs e)
{
this.Dispatcher.Invoke(new Action(() =>
{
gNewBox.Visibility = System.Windows.Visibility.Collapsed;
cavLoading.Visibility = System.Windows.Visibility.Visible;
ShowStruct();
}));
GetData();
}
public void GetData()
{
for (int i = 0; i < 11; i++)
{
bgWl.ReportProgress(i);
System.Threading.Thread.Sleep(500);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MaterialDesign의 ComboBox HasClearButton 크기 변경WPF MaterialDesign은 편리하지만 때로는 표시가 너무 크거나 약간 사용하기 쉽습니다. ComboBox를 사용할 때 선택한 버튼을 지우려면 지우기 버튼을 표시할 수 있습니다. 아래와 같은 표시가 됩니다 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.