it-swarm.dev

إضافة صورة في زر WPF

جربت هذا الحل:

<Button>
    <StackPanel>
        <Image Source="Pictures/img.jpg" />
        <TextBlock>Blablabla</TextBlock>
    </StackPanel>
</Button>

لكن يمكنني رؤية الصورة فقط في نافذة المشروع ، وعندما أبدأ تشغيل البرنامج ، تختفي.

إذا جربت هذا:

  Image img = new Image();
  img.Source = new BitmapImage(new Uri("foo.png"));

  StackPanel stackPnl = new StackPanel();
  stackPnl.Orientation = Orientation.Horizontal;
  stackPnl.Margin = new Thickness(10);
  stackPnl.Children.Add(img);

  Button btn = new Button();
  btn.Content = stackPnl;

أحصل على استثناء "'System.Windows.Markup.XamlParseException' في PresentationFramework.dll".

ماهو الحل؟

51
Marco

في حالة وجود صورة "مفقودة" ، هناك العديد من الأشياء التي يجب مراعاتها:

  1. عندما يتعذر على XAML تحديد موقع مورد قد يتجاهله (عندما لا يرمي XamlParseException)

  2. يجب إضافة المورد وتعريفه بشكل صحيح:

    • تأكد من وجوده في المشروع الخاص بك حيث هو متوقع.

    • تأكد من أنها بنيت مع مشروعك كمورد.

      (انقر بزر الماوس الأيمن → خصائص → BuildAction = 'الموارد')

Snippet

شيء آخر يجب تجربته في حالات مماثلة ، وهو مفيد أيضًا لإعادة استخدام الصورة (أو أي مورد آخر):

حدد صورتك كمورد في XAML:

<UserControl.Resources>
     <Image x:Key="MyImage" Source.../>
</UserControl.Resources>

واستخدمه لاحقًا في التحكم (العناصر) المرغوبة:

<Button Content="{StaticResource MyImage}" />
68
Ron.B.I

يرجى تجربة مقتطف XAML أدناه:

<Button Width="300" Height="50">
  <StackPanel Orientation="Horizontal">
    <Image Source="Pictures/img.jpg" Width="20" Height="20"/>
    <TextBlock Text="Blablabla" VerticalAlignment="Center" />
  </StackPanel>
</Button>

في XAML العناصر في هيكل شجرة. لذلك يجب عليك إضافة عنصر التحكم التابع إلى عنصر التحكم الأصل. مقتطف الشفرة أدناه يعمل أيضًا بشكل جيد. حدد اسمًا لشبكة الجذر XAML الخاصة بك باسم "MainGrid".

Image img = new Image();
img.Source = new BitmapImage(new Uri(@"foo.png"));

StackPanel stackPnl = new StackPanel();
stackPnl.Orientation = Orientation.Horizontal;
stackPnl.Margin = new Thickness(10);
stackPnl.Children.Add(img);

Button btn = new Button();
btn.Content = stackPnl;
MainGrid.Children.Add(btn);
26
Vimal CK

استعمال:

<Button Height="100" Width="100">
  <StackPanel>
    <Image Source="img.jpg" />
    <TextBlock Text="Blabla" />
  </StackPanel>
</Button>

يجب أن تعمل. لكن تذكر أنه يجب أن يكون لديك صورة مضافة إلى المورد في مشروعك!

7
Maciek

يمكنك ضبط خلفية الزر على الصورة إذا كنت تريد بعد ذلك تراكب النص.

<Button>
   <Button.Background>
     <ImageBrush ImageSource="/AssemblyName;component/Pictures/img.jpg"/>
   </Button.Background>
   <TextBlock>Blablabla</TextBlock>
</Button>

احترس من بناء جملة مصدر الصورة. انظر هذا السؤال للحصول على مساعدة.

5
kjhf

كان لي أيضا نفس المشكلة. لقد أصلحت ذلك باستخدام الكود التالي.

        <Button Width="30" Margin="0,5" HorizontalAlignment="Stretch"  Click="OnSearch" >
            <DockPanel>
                <Image Source="../Resources/Back.jpg"/>
            </DockPanel>
        </Button>

ملاحظة: تأكد من أن إجراء إنشاء الصورة في نافذة الخاصية ، يجب أن يكون Resource.

 enter image description here 

3
Ali Asad

جرب ContentTemplate:

<Button Grid.Row="2" Grid.Column="0" Width="20" Height="20"
        Template="{StaticResource SomeTemplate}">
    <Button.ContentTemplate>
        <DataTemplate>
            <Image Source="../Folder1/Img1.png" Width="20" />
        </DataTemplate>
    </Button.ContentTemplate>
</Button>
2
yu yang Jian

لقد وجدت أنه كان علي أيضًا تعيين Access Modifier في علامة تبويب "الموارد" "عام" - تم تعيينه افتراضيًا على "داخلي" ولم يظهر الرمز الخاص بي إلا في وضع التصميم ولكن ليس عند تشغيل التطبيق.

0
Robin Bennett