0

Windows 8 タブレット アプリケーションを開発しています

これは私のカスタム ユーザー コントロールです。

<Grid>
    <TextBox x:Name="Points" Visibility="Collapsed" IsHitTestVisible="False" Grid.ColumnSpan="3" Grid.Column="4" HorizontalAlignment="Left" Margin="48,10,0,0" Grid.Row="1" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" TextChanged="TextBox_TextChanged"/>
</Grid>

MainPageフォームに配置しました:

<local:MyUserControl1 x:Name="Test" HorizontalAlignment="Left" Margin="280,493,0,0" VerticalAlignment="Top" Width="584" Height="166"/>

C# (MAinPage.xaml.cs) の場合:

Test.Points.Text = "";

エラー:

Gamification.MyUserControl1.Points' is inaccessible due to its protection level

Windows Phone 8では、これらの問題はありませんでした...

それを解決する方法は?

編集2:

コントロールが追加されました: 右クリック -> 追加 -> 新しいアイテム -> ユーザー コントロール

フル コントロール XAML:

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

<Grid>
    <TextBox x:Name="Points" Visibility="Collapsed" IsHitTestVisible="False" Grid.ColumnSpan="3" Grid.Column="4" HorizontalAlignment="Left" Margin="48,10,0,0" Grid.Row="1" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" TextChanged="TextBox_TextChanged"/>
</Grid>
</UserControl>

フル コントロール C#:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace Gamification
{
public sealed partial class MyUserControl1 : UserControl
{
    public MyUserControl1()
    {
        this.InitializeComponent();
    }

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {

    }
}
}

メイン ページの XAML:

<Page
x:Class="Gamification.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Gamification"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <local:MyUserControl1 x:Name="Test" HorizontalAlignment="Left" Margin="280,493,0,0" VerticalAlignment="Top" Width="584" Height="166"/>
    <Button Content="Button" HorizontalAlignment="Left" Margin="670,692,0,0" VerticalAlignment="Top" Click="Button_Click"/>
</Grid>
</Page>

メインページ C#:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        Test.Points.Text = "";
    }
4

2 に答える 2

2

あなたの UserControl は型そのものです。それ自体が公開されている要素のみを公開します。コントロール内の x:Name 要素は、UserControl にパブリックに公開しない限り、それ自体にのみアクセスできます。

UserControl のコンシューマーがプロパティを設定できるようにするプロパティを公開する必要があります。これにより、内部要素が変更されます。これは、通常、その DP の DependencyProperty および PropertyChange 通知によって行われます。

于 2013-09-09T18:05:22.783 に答える
0

TextBlock を追加x:FieldModifier="public"して、ユーザー コントロールの外部で使用できるようにすることができます。
UserControl のカプセル化が壊れてしまうため、あまり良い方法ではないことに注意してください (この場合、UserControl は PointText 依存関係プロパティを公開して、コントロールを使用するページがこのテキストがどのようになっているかを知る必要がないようにする必要があります)。示されているように、依存関係プロパティを使用すると、このプロパティのバインドも使用できるようになります)。

于 2013-09-10T12:21:55.523 に答える