>source

Binding을 사용하여 사용자 지정 컨트롤을 만들려고하는데 ImageSource의 바인딩이 작동하지 않습니다. 그것은 내 코드입니다.

Customcontrol.xaml :

<?xml version="1.0" encoding="UTF-8" ?>
<ContentView
    x:Class="Custom.CustomEntry"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
    <ContentView.Content>
        <StackLayout Orientation="Vertical">
            <ImageButton
                BackgroundColor="Transparent"
                Clicked="Open"
                Source="{Binding Icon}" />
            <Frame
                x:Name="frameemojis"
                BackgroundColor="red"
                IsVisible="False">
                <Label Text="Hello" />
            </Frame>
        </StackLayout>
    </ContentView.Content>
</ContentView>

CustomControl.xaml.cs :

공용 부분 클래스 CustomControl : ContentView { 공용 정적 읽기 전용 BindableProperty IconProperty = BindableProperty.Create ( "아이콘", typeof (ImageSource), typeof (CustomControl));

   public ImageSource Icon
    {
        get { return (ImageSource)GetValue(IconProperty); }
        set { SetValue(IconProperty, value); }
    }
    bool state = true;
    void Open(object o, System.EventArgs e)
    {
        if (state)
        {
            state = false;
            frameemojis.IsVisible = true;
        }
        else
        {
            state = true;
            frameemojis.IsVisible = false;
        }
    }
    public CustomControl()
    {
        InitializeComponent();
    }
}

}

MainPage.xaml :

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    x:Class="App23.MainPage"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:fav="clr-namespace:Custom;assembly=Custom">
    <StackLayout>
        <fav:CustomControl Icon="icon.png" WidthRequest="200" />
    </StackLayout>
</ContentPage>

MainPage.xaml.cs :

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        BindingContext = new ViewModel();
        InitializeComponent();
    }
}

ViewModel은 이제 비어 있지만 나중에 다른 것을 제어하는 ​​데 사용할 것입니다. 내 생각은 MainPage에서 아이콘을 설정하는 것입니다.Icon = "icon.png". 왜 작동하지 않는지 아십니까?

  • 답변 # 1

    다음과 같이 Custom View의 코드를 수정할 수 있습니다.

    xaml에서

    <?xml version="1.0" encoding="UTF-8" ?>
    <ContentView
        x:Class="Custom.CustomEntry"
        xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Name="CustomView"   //set name of custom view
        >
        <ContentView.Content>
            <StackLayout Orientation="Vertical">
                <ImageButton
                    BackgroundColor="Transparent"
                    Clicked="Open"
                    Source="{Binding Source={x:Reference CustomView},Path=Icon}" />
    
                <Frame
                    x:Name="frameemojis"
                    BackgroundColor="red"
                    IsVisible="False">
                    <Label Text="Hello" />
                </Frame>
            </StackLayout>
        </ContentView.Content>
    </ContentView>
    
    

  • 답변 # 2

    문서에서

    The naming convention for bindable properties is that the bindable property identifier must match the property name specified in the Create method, with "Property" appended to it.

    따라서 이름을 바꿔야합니다. LeftSideIconProperty ...에 IconProperty 또는 Icon ...에 LeftSideIcon .

관련 자료

  • 이전 html - datetime-local 요소에 적용되지 않는 CSS 스타일
  • 다음 laravel - invalidargumentexception - 작업 app \ http \ controllers \ app \ http \ controllers \ ordercontroller @ store가 정의되지 않았