2015-02-26 3 views
0

Это моя последняя попытка сделать холст невидимым всякий раз, когда label.Content является пустой строкой. Любая помощь/совет оценили, спасибо.hide Canvas в зависимости от содержания ребенка

<Canvas Visibility="Visible"> 
    <Label Content="" Name="holamouse" /> 
    <Canvas.Resources> 
     <Style TargetType="{x:Type Canvas}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Content, ElementName=holamouse, UpdateSourceTrigger=PropertyChanged}" Value="{x:Static sys:String.Empty}"> 
        <Setter Property="Canvas.Visibility" Value="Hidden"></Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Canvas.Resources> 
</Canvas> 
+0

Когда ссылка правильная, существует ли решение для значения "string.isnullorempty"? – alexn234

ответ

1

Проблема заключается в том, что значение локального свойства всегда имеет более высокий приоритет, чем значение, заданное с помощью Style Setter. См. Dependency Property Value Precedence.

Когда вы устанавливаете Visibility="Visible" на холсте, любой Style Setter для этого свойства молча игнорируется. Вы можете переместить назначение свойства в стиле, хотя Visible значение по умолчанию равно:

<Canvas> 
    <Label Content="" Name="holamouse" /> 
    <Canvas.Resources> 
     <Style TargetType="{x:Type Canvas}"> 
      <Setter Property="Visibility" Value="Visible"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Content, ElementName=holamouse}" 
          Value="{x:Static sys:String.Empty}"> 
        <Setter Property="Visibility" Value="Hidden"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Content, ElementName=holamouse}" 
          Value="{x:Null}"> 
        <Setter Property="Visibility" Value="Hidden"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Canvas.Resources> 
</Canvas> 

Обратите внимание также, что существует второй триггер для Value="{x:Null}" в настоящее время.

+0

Прекрасно :) Теперь он работает, thnx для предложения x: null. – alexn234

0

Вы должны переместить свойство по умолчанию видимость из <Canvas> тега и в <Style>

Это происходит потому, что свойства, определенные в <Tag> имеют приоритет над любыми сеттеры собственности, в том числе сработавших сеттеры собственности. См. MSDN Dependency Property Precedence List, если вы хотите получить более подробную информацию.

<Canvas> 
    <Label Content="" Name="holamouse" /> 
    <Canvas.Resources> 
     <Style TargetType="{x:Type Canvas}"> 
      <Setter Property="Canvas.Visibility" Value="Visible"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Content, ElementName=holamouse, UpdateSourceTrigger=PropertyChanged}" Value="{x:Static sys:String.Empty}"> 
        <Setter Property="Canvas.Visibility" Value="Hidden"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Canvas.Resources> 
</Canvas> 
+0

прав !, я помню, я добавил setter unter style.triggers, и он не будет компилироваться, поэтому я удалил его снова. ty 4 сообщение – alexn234

Смежные вопросы