删除UserControl中的某些控件的模糊效果
问题描述:
我有以下代码,我从Code Behind创建UI控件。请参阅IsEnabled方法。我只想让用户控件的背景变得模糊,但问题在于它上面的文本块也变得模糊。这是整个代码。请帮忙。删除UserControl中的某些控件的模糊效果
public class UserControlLiveAnalysisBehaviour : System.Windows.Interactivity.Behavior<UserControl>
{
private UserControl CustomControlContent;
private bool IsExecuted;
protected override void OnAttached()
{
AssociatedObject.Loaded += UserControlLoadedHandler;
}
private void UserControlLoadedHandler(object sender, RoutedEventArgs e)
{
RegisterUserControlActivatedHandler();
}
private void RegisterUserControlActivatedHandler()
{
CustomControlContent = AssociatedObject;
if (CustomControlContent == null)
{
return;
}
var RunDataInstance = RunDataViewModel.Instance;
RunDataViewModel.RunDataFileSession<string> session = RunDataInstance.GetLiveSessionObject();
if (session != null)
{
if (session.IsLiveAnalysisSession)
{
IsEnabled();
}
}
}
private void IsEnabled()
{
if (!IsExecuted)
{
StackPanel stackPanel = new StackPanel();
ContentControl cc = new ContentControl();
StackPanel Sp = new StackPanel();
Sp.HorizontalAlignment = HorizontalAlignment.Center;
Sp.VerticalAlignment = VerticalAlignment.Center;
TextBlock tbl = new TextBlock();
tbl.Text = "Live Analysis is running. Please wait till it completes....";
tbl.HorizontalAlignment = HorizontalAlignment.Center;
tbl.VerticalAlignment = VerticalAlignment.Top;
Panel.SetZIndex(tbl, 1000);
//tbl.Style = TextBlockStyle();
Sp.Children.Add(tbl);
Sp.Background = System.Windows.Media.Brushes.Transparent;
BlurEffect effect = new BlurEffect();
effect.Radius = 3;
CustomControlContent.Effect = effect;
Sp.Effect = null;
cc.Content = CustomControlContent.Content;
stackPanel.Children.Add(cc);
stackPanel.Children.Add(Sp);
CustomControlContent.Content = stackPanel;
IsExecuted = true;
}
}
}
答
您申请effect
到CustomControlContent
,把一切它内部的东西,所以效果会影响它里面的一切。如果您希望某些元素不受此影响,则无法将其添加为应用了效果的控件的子元素。
而不是创造一切,在后面的代码,简单的风格可能会更容易维护和更改这个目的:
<ContentControl Name="CustomControlContent" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ContentPresenter
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Cursor="{TemplateBinding Cursor}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Opacity="0.6">
<ContentPresenter.Effect>
<BlurEffect Radius="5"/>
</ContentPresenter.Effect>
</ContentPresenter>
<TextBlock Text="Update, please wait ..." HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
<ContentControl.Content>
<Image Source="C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg"/>
</ContentControl.Content>
</ContentControl>
结果:
注:我也降低了透明度,这是为什么图像变得更亮