2016-05-25 2 views
0

私はSilverlightプロジェクトを持っています。私はUserControlがプロジェクトにあります。このUserControlのIsEnabledは動的に設定され、ほとんどの場合falseに設定されます。Silverlight XamlコントロールのIsEnabledプロパティをオーバーライドします

このUserControlでは、いくつかのネストされたグリッドがあり、すべてのグリッドはいつものように親(UserControl)からIsEnableを継承します。

ただし、このUserControl内のグリッドの1つでは、この機能を継承しません。私はそれを常に真にしたい。 IsEnabled機能をオーバーライドする方法はありますか?

私が試みたのは、ContentControlでラップし、IsEnabledをTrueに設定しましたが、動作しませんでした。

<ContentControl IsEnabled="True"> 
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="0,0,0,0" BorderThickness="0"> 
    <HistoryControls:EditableMAMGridContainer StateInfo="{Binding Path=StateInfo, Source={StaticResource Evm}}" /> 
    </ScrollViewer> 
</ContentControl> 

ルートはこのScrollviewerのUserControlであり、複数の親と祖父母があります。それは非常に深いです。

EDIT:ユーザーコントロールがFalseに設定し、ContentControlには真(上記のコードの逆の場合)を設定した場合 このコードの作品が、その逆は

<UserControl IsEnabled="True"> 
    . 
    . 
     <ContentControl IsEnabled="False"> 
      ... 

動作しないが、その後動作しません。

+1

この目的は何ですか?親コントロールを無効にすると子コントロールのすべてのメッセージがブロックされ、入力に反応できなくなることが分かっていましたか? 状態を使用して必要性を達成できますか?親コントロールが無効のように見えるときに状態を「ブロックする」ようにしますか? – lerthe61

+0

はい、私は知っている、実行時に、私は無効にする必要がありますいくつかの条件に応じて。しかし、データグリッドでは、このuserControlから独立して常に有効にしたいと考えています。 – Creed

答えて

3

まず、親を無効にすると、すべての子が無効になります。期間。これを変更することはできません。これは実際には良いことです。この方法では、UIのサブツリー全体に対してすべてのユーザー入力を確実にブロックすることができます。

フレームワークの概念を曲げようとしないでください。ここでのコンセプトは、無効にした場合、ユーザー入力がないことを意味します。その部分ではなく、そのサブツリーの最も小さな角ではありません。

このコンセプトに従えば、ごく一部には依然としてユーザー入力を受け取ることが望ましいため、実際には親を無効にしたくないことがすぐ明らかになります。したがって、概念的には、それは無効にされていません!

これを技術的にどのように翻訳するのですか?

これは、兄弟ブランチを有効にしながら、ブランチの1つのブランチを無効にできるようにツリーを構造化する必要があることを意味します。今、あなたは簡単に含まれているサブツリーを無効にするAirplaneTravelPlanningControlを無効にすることができ

<TravelBooking> 

    <!-- this will be disabled if we don't travel by plane --> 
    <AirplaneTravelPlanningControl> 
     <TransferToAirportPlanner/> 
     <FlightToDestinationPlanner/> 
     <ReturnFlightPlanner/> 
     <TransferFromAirportPlanner/> 
    </AirplaneTravelPlanningControl> 

    <!-- this will always be enabled --> 
    <HotelPlanner/> 

</TravelBooking> 

無効サブツリーを可能にするために、木を再編

<TravelBooking> 

    <!-- this will be disabled if we don't travel by plane --> 
    <TransferToAirportPlanner/> 
    <FlightToDestinationPlanner/> 
    <ReturnFlightPlanner/> 
    <TransferFromAirportPlanner/> 

    <!-- this will always be enabled --> 
    <HotelPlanner/> 

</TravelBooking> 

+0

あなたの良い説明をありがとう。私はあなたが正しいと思います。しかし、私はIsEnabledをすべての子どもやツリーのすべてのメンバーに追加する必要がありますか?これはあなたの答えから私が理解していることです。 – Creed

+0

例を追加しました。 – Martin

関連する問題