特定の条件に基づいてポップアップ内のボタンの色を変更したいので、その条件に基づいてテキストを設定したいと思います。私はコードの背後でこれを行う必要があります。WPFポップアップの要素にアクセスするにはどうすればよいですか?
StackPanelに複数のTextBlockがあるポップアップがあります。最初の3つのコースの詳細にバインドされています(これはスケジューリングアプリ、学校のプロジェクトです)。最後の1つは、そのコースに関する競合がない限り空になりたい。つまり、ポップアップを開くたびにTextBlockに何が入っているのかを動的に決定したいのです。
<Popup Name="CourseListDetail" Width="Auto" Height="Auto">
<StackPanel>
<TextBlock Margin="10,10,10,0">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}: {1}">
<Binding Path="CourseCode"/>
<Binding Path="LongTitle"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Margin="10,0,10,0">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}/{2}">
<Binding Path="ProfessorsString"/>
<Binding Path="Enrollment"/>
<Binding Path="Capacity"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Margin="10,0,10,0" Grid.Row="2" Grid.Column="1" Text="{Binding MeetingsString}" TextWrapping="Wrap"
HorizontalAlignment="Center"/>
<TextBlock TextWrapping="WrapWithOverflow" MaxWidth="300" Text="{Binding Description}" Margin="10,10,10,10"/>
<TextBlock Name="ConflictText" Foreground="Red" HorizontalAlignment="Center" Text="{Binding ConflictString}"/>
<Button Name="Detail_AddCourse" Content="Add To Schedule" Margin="10,10,10,10" Padding="5" Background="LightGreen"
Click="AddCourseButton_Click"
Style="{StaticResource MyButtonStyle}"/>
</StackPanel>
</Border>
</Popup>
私はあなたがコース上でクリックしたときにポップアップを開き、そのコースについてポップアップのDataContextを与える機能を持っていますが、私はその直下のTextBlock、またはボタンにアクセスする方法がわかりません、機能を通じて。私は子供のプロパティか何かがあるはずと考えたので、私はボタンを呼ぶことができ、のようなもの:
CourseListDetail.Detail_AddCourse.Background = "Red";
または
CourseListDetail.Child.Button().Background = "Red";
などの機能の背後にある
コード:
private void CourseListItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
ListViewItem selection = sender as ListViewItem;
Course course = selection.DataContext as Course;
CourseListDetail.DataContext = course;
CourseListDetail.PlacementTarget = selection;
CourseListDetail.IsOpen = true;
CourseListDetail.Focus();
hasConflict conflictType = _schedule.HasConflict(course);
if (conflictType != hasConflict.NO_CONFLICT) { //If there is a conflict
//Change button color to red here
if (conflictType == hasConflict.COURSE_FULL) { //If the course is full
//Set TextBlock text to conflict message here
}
}
else { //No conflict
//Set button color to green
}
}
hasflictは単なる列挙型です
なぜいくつかのプロパティを使用して、それらを色などにバインドしないでください。 – Krishna
これに対する正しい答えは、いつものように、ポップアップ要素を直接操作してはならない**ことです。あなたのポップアップは、適切にポップアッププロパティにバインドされた、制御したいプロパティを含むビューモデルによってコードの背後に表示されるべきです。次に、ビューモデルのプロパティを変更するだけで、ポップアップ自体に自動的に反映されます。 –
これは初めてWPFを使用しています。私はこのプロジェクトのためにそれを学び始めたばかりで、私たちはSprint 2にいます。あなたのどちらが示唆していることをやっているか、あるいはあなたが正確に提案していることをどうやって行うのかは本当に分かりません。 –