2017-03-14 24 views
-2

ソリューション:C++/CX WPF、コード内のユーザーコントロールのプロパティへのアクセスも

はMenuControl.cppで

#include "MenuEntryControl.xaml.h" 

を追加します。

Thx Andy!

私はVisual Studioコミュニティ2017のC++/CXでプログラムを書きます。 私はXAMLで自分のインターフェイスを構築します。

<UserControl 
x:Class="XXXXXX.MenuEntryControl" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:XXXXXX" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
d:DesignHeight="54" 
d:DesignWidth="276"> 

<Grid x:Name="container"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="39*"/> 
     <ColumnDefinition Width="63*"/> 
     <ColumnDefinition Width="143*"/> 
     <ColumnDefinition Width="31*"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock x:Name="TitleInput" Grid.Column="2" TextAlignment="Center" Margin="0,21,0,15" TextWrapping="Wrap" Text="I N P U T" Foreground="White" FontFamily="Open Sans Light"/> 
    <Image x:Name="image" Source="ms-appx:///Assets/settings.png" HorizontalAlignment="Left" Height="28" VerticalAlignment="Top" Width="29" Margin="17,14,0,0" Grid.Column="1"/> 
    <Button x:Name="ClickableZone" Grid.ColumnSpan="4" Height="54" Width="276" Click="ClickableZone_Click" BorderThickness="0" Background="#00000000"/> 
</Grid> 
</UserControl> 

MenuEntryControl.xaml.h:

だから、私は(これは、カスタムボタンです)

MenuEntryControl.xaml

これはMenuEntryControlのXAMLでカスタムユーザーコントロールをしました

[Windows::Foundation::Metadata::WebHostHidden] 
public ref class MenuEntryControl sealed 
{ 
    public: 
     MenuEntryControl(); 
     void SetTitle(Platform::String ^title); 
     void SetFocus(bool focused); 

     //Titre affiché sur le bouton (Set attribut s_title) 

     property Platform::String^Title 
     { 
      Platform::String^get() { return s_title; } 
      void set(Platform::String^value) 
      { 
       s_title = value; 
       Refresh(); 
      } 
     } 

     property Windows::UI::Xaml::Media::ImageSource^Icon 
     { 
      Windows::UI::Xaml::Media::ImageSource^ get() { return is_icon; } 
      void set(Windows::UI::Xaml::Media::ImageSource^value) 
      { 
       is_icon = value; 
       Refresh(); 
      } 
     } 


    private : 
     Platform::String^s_title; //Titre du bouton (Attribut) 
     bool b_isFocused; 
     Windows::UI::Xaml::Media::ImageSource^is_icon; //Icone affichée sur le bouton (Attribut) 
     void ClickableZone_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); 

     //Methode de rafraichissement de l'UI 
     void Refresh(); 


}; 

リビルド後、このコントロールをMenuControl.xに追加します。 MenuControl.cppで)

私ができる」; AML(メインと設定)

MenuControl.xaml

そして、これが問題になりました、だから、MenuControl.xaml

<UserControl 
x:Class="XXXXXX.MenuControl" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:local="using:XXXXXX" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
d:DesignHeight="720" 
d:DesignWidth="276"> 

<Grid Background="#FF4B4B4B"> 
    <Border BorderBrush="#66FFFFFF" BorderThickness="0,0.4,0,0" HorizontalAlignment="Left" Height="10" Margin="0,83,0,0" VerticalAlignment="Top" Width="276"/> 
    <TextBlock x:Name="textBlock" HorizontalAlignment="Left" TextAlignment="Center" Margin="0,30,0,0" TextWrapping="Wrap" Text="X X X X X X" VerticalAlignment="Top" Foreground="White" FontFamily="Open Sans Light" FontSize="24" Width="276"/> 
    <local:MenuEntryControl x:Name="Main_button" HorizontalAlignment="Left" Height="55" Margin="0,105,0,0" VerticalAlignment="Top" Width="276" Icon="ms-appx:///Assets/home.png" Title="M A I N"/> 
    <local:MenuEntryControl HorizontalAlignment="Left" Height="58" Margin="0,160,0,0" VerticalAlignment="Top" Width="276" Title="C O N F I G U R E" Icon="ms-appx:///Assets/settings.png"/> 

</Grid> </UserControl> 

のXAMLコードでありますx:name "Main_button"でユーザーコントロールのメソッドにアクセスします。この行で

using namespace Windows::Foundation; 
using namespace Windows::Foundation::Collections; 
using namespace Windows::UI::Xaml; 
using namespace Windows::UI::Xaml::Controls; 
using namespace Windows::UI::Xaml::Controls::Primitives; 
using namespace Windows::UI::Xaml::Data; 
using namespace Windows::UI::Xaml::Input; 
using namespace Windows::UI::Xaml::Media; 
using namespace Windows::UI::Xaml::Navigation; 

// The User Control item template is documented at  https://go.microsoft.com/fwlink/?LinkId=234236 

MenuControl::MenuControl() 
{ 
    InitializeComponent(); 
} 

void XXXXXX::MenuControl::Configure() 
{ 
    Main_button-> 
} 

ビジュアル発言:

Main_button-> 

正直

を "許可され​​ていない不完全なクラスへのポインタ"、私がブロックされています。アイデアはありますか?

+0

あなたは本当にUIのコードをC++/CLIを使用しないでください。代わりにC#に試してみてください。 –

+0

UI用にC#、コア用にC++を使用できますか? 私にはセキュリティの制約があります。 – user7360756

+2

使用されている名前空間によると、WPFではなくWinRT(またはUWP)のようです。その言語はC++/CXであり、C++/CLIではありません。 この場合、UIにC#を使用し、コアにC++を使用できますが、C#ライブラリとC++ライブラリ間でオブジェクトを転送できる制限があります。 – Pavel

答えて

0

C++では、使用するクラスのヘッダファイルをインクルードする必要があります。このコンパイルエラーを修正するには、MenuEntryControlが定義されているヘッダーファイルを含めます。 MenuControl.cppの最上部またはその近くで、これを追加します。

#include "MenuEntryControl.xaml.h" 
+0

それは動作します!私はばかです。ありがとうございました ! – user7360756

+0

.NETの場合は、C++を実際に書いているときにC#を書いていると思うのはとても簡単です。私は2つの間で切り替えるときはいつもそれをやります。 – Andy

関連する問題