2017-10-20 148 views
0

我有以下代码,我从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; 
      } 
     } 
    } 

回答

2

您申请effectCustomControlContent,把一切它内部的东西,所以效果会影响它里面的一切。如果您希望某些元素不受此影响,则无法将其添加为应用了效果的控件的子元素。

而不是创造一切,在后面的代码,简单的风格可能会更容易维护和更改这个目的:

<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> 

结果:
注:我也降低了透明度,这是为什么图像变得更亮

Jellyfish