Expose Expand and Collapse events, which will occur when a RadCardViewItem element is either collapsed or expanded.
Currently, to achieve this behavior, subscribe to the Loaded event of the RadCardView control, and add two new event handlers via the AddHandler method.
For the first handler, which will be responsible for occurring when expanding, pass as a first argument RadExpander.ExpandedEvent. As a second parameter, create a new RoutedEventHandler instance with a method, which will fire the custom logic when the internal RadExpander element of the current RadCardView is getting expanded.
For the second added event handler, which will be responsible for the collapsing logic, the same approach as the abovementioned one could be used.
The following code snippet shows this approach's implementation:
private void CardView_Loaded(object sender, RoutedEventArgs e)
{
this.cardView.AddHandler(RadExpander.ExpandedEvent, new RoutedEventHandler(Expanded));
this.cardView.AddHandler(RadExpander.CollapsedEvent, new RoutedEventHandler(Collapsed));
}
private void Expanded(object sender, RoutedEventArgs e)
{
var expander = e.OriginalSource as RadExpander;
//Get clicked CardViewItem element
var cardViewItem = expander.ParentOfType<RadCardViewItem>();
}
private void Collapsed(object sender, RoutedEventArgs e)
{
var expander = e.OriginalSource as RadExpander;
//Get clicked CardViewItem element
var cardViewItem = expander.ParentOfType<RadCardViewItem>();
}
Add property that sets the background of the card's header. Currently to do that you need to edit the ControlTemplate of the RadExpander element in the ControlTemplate of RadCardViewItem. Or use code-behind to find the corresponding Border element and assign its value.
The new property could be set on RadCardView or on the RadCardViewItems.
The following example shows how to set the Background in code:
static MainWindow()
{
EventManager.RegisterClassHandler(typeof(RadCardViewItem), RadCardViewItem.LoadedEvent, new RoutedEventHandler(OnRadCardViewItemLoaded));
}
private static void OnRadCardViewItemLoaded(object sender, RoutedEventArgs e)
{
var item = (RadCardViewItem)sender;
var headerBorder = item.ChildrenOfType<Border>().FirstOrDefault(x => x.Name == "HeaderPanel");
if (headerBorder != null)
{
headerBorder.Background = Brushes.Red;
}
}