我想根據某些條件改變彈出按鈕的顏色,我想根據這些條件設置一些文本。我需要在後面的代碼中執行此操作。如何訪問WPF彈出窗口中的元素?
我有一個StackPanel中的幾個TextBlocks彈出。前3個必然會提供有關課程的詳細信息(這是一個調度應用程序;學校項目)。最後一個我想成爲空的,除非這個過程有衝突。也就是說,我想在每次打開彈出窗口時動態決定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
}
}
hasConflict只是一個枚舉
爲什麼你不使用一些屬性並將它們綁定到顏色或其他東西? – Krishna
正確的答案是,一如既往,你應該不**直接操縱彈出元素。您的彈出窗口應該在代碼後面由視圖模型表示,其中包含要控制的屬性,並根據需要綁定到彈出式屬性。然後,您只需更改視圖模型中的屬性,並自動將其反映到彈出窗口中。 –
這是我第一次使用WPF。我只是開始爲這個項目學習它,我們正在Sprint 2.我真的不確定如何去做你們中的任何一個人建議,或者甚至你準確的建議。 –